fishyu123 发表于 2018-4-13 09:26:11

关于变长数组的问题(S1E17知识点备忘)

#include <stdio.h>

int main()
{
      int n, i;

      printf("请输入字符的个数:");
      scanf("%d", &n);

      char a;

      printf("请开始输入字符:");
      getchar(); // 将标准输入流中剩下的 '\n' 扔掉
      for (i = 0; i < n; i++)
      {
                scanf("%c", &a);
      }
      a = '\0';
      printf("你输入的字符串是:%s\n", a);

      return 0;
}
既然定义数组时方括号里的数字是数组中元素的个数,那为何上面代码中的char定义为 char a?如果+1是为了存放\0的话,那之前的概念该怎样解释呢

int a; // 定义一个整型数组,总共存放6个元素
char b; // 定义一个字符型数组,总共存放24个元素
double c; // 定义一个双精度浮点型数组,总共存放3个元素
上面的几个数组定义,int a代表存放五个整形数据加一个\0吗,char b代表存放23个字符数据加一个\0吗,double c代表存放两个浮点型数据加一个\0吗?

风过无痕丶 发表于 2018-4-13 09:58:42

{:10_285:}为什么非字符型数组你也给要给他一个结束位。。。

ba21 发表于 2018-4-13 10:27:47

字符型占1个字节
int double 根据实行电脑情况不同而异。

C不存在字符串的概念,所以表字符数组来表示。约定最后一位必须是'\0' 以'\0'定为结束标志
也可以直接用字符指针写为
char *a="i love fishc"

规定而已,就这么简单

fishyu123 发表于 2018-4-13 10:27:49

风过无痕丶 发表于 2018-4-13 09:58
为什么非字符型数组你也给要给他一个结束位。。。

非字符型数组不需要\n吗?那下面这个语句是应该存放23个元素了加一个\n了?
char b; // 定义一个字符型数组,总共存放24个元素

风过无痕丶 发表于 2018-4-13 10:42:54

fishyu123 发表于 2018-4-13 10:27
非字符型数组不需要\n吗?那下面这个语句是应该存放23个元素了加一个\n了?
char b; // 定义一个字 ...

'\0'表示一个空字符!
printf 以 %s输出的时候 遇到'\0'了他就会停止继续读取了。你可以暂时把他理解为一个字符串的结束的标志位。

fishyu123 发表于 2018-4-13 10:48:07

风过无痕丶 发表于 2018-4-13 10:42
'\0'表示一个空字符!
printf 以 %s输出的时候 遇到'\0'了他就会停止继续读取了。你可以暂时把他理解 ...

不好意思我刚才打错了,我是说
非字符型数组不需要\0吗?那下面这个语句是应该存放23个元素了加一个\0了?
char b; // 定义一个字符型数组,总共存放24个元素

如果是char 的话,他里面存放的数据是{'a','c','\0'}这样还是说{‘a’,'b','c','\0'}这样?我不懂在这里

风过无痕丶 发表于 2018-4-13 10:51:47

'\0'也是一个元素!你也可以在最后一个不放结束位! 你也可以放字符!当然!输出的时候你就要用一点点手段了!

所以!我决定来晕一下你!

#include <stdio.h>

int main(void) {

        char a = "abcdef";// 这里是6个
        char b = "abcde";   // 这里是5个


        for (int i = 0; i < 6; i++) {
                printf("%c", a);
        }
        putchar('\n');
        printf("%s", b);

        getchar();

        return 0;
}

fishyu123 发表于 2018-4-13 10:52:24

风过无痕丶 发表于 2018-4-13 09:58
为什么非字符型数组你也给要给他一个结束位。。。

你这句话的意思是只有字符型数组在结束位才会有\0,而int数组系统是不会添加\0结束位的吗

风过无痕丶 发表于 2018-4-13 11:01:20

本帖最后由 风过无痕丶 于 2018-4-13 11:07 编辑

fishyu123 发表于 2018-4-13 10:52
你这句话的意思是只有字符型数组在结束位才会有\0,而int数组系统是不会添加\0结束位的吗



其实还可以举例~

现在发现什么端倪了吗~
没有的话 我再给你附上一个ASCII表

让我再给你一点提示。没有被初始化到的元素都被初始化为0!

fishyu123 发表于 2018-4-13 11:07:06

风过无痕丶 发表于 2018-4-13 10:51
'\0'也是一个元素!你也可以在最后一个不放结束位! 你也可以放字符!当然!输出的时候你就要用一点点 ...

谢谢了,我好像明白了,只有字符串末尾才会有\0,数字没有。
刚才你的程序我运行不成功,因为char a无法放入六个字母,系统默认最后一位是\0,改成7就可以了。

fishyu123 发表于 2018-4-13 13:26:40

fishyu123 发表于 2018-4-13 11:07
谢谢了,我好像明白了,只有字符串末尾才会有\0,数字没有。
刚才你的程序我运行不成功,因为char a ...

哦哦,明白了,请问你用的是什么软件检查代码的,感觉很不错哎
页: [1]
查看完整版本: 关于变长数组的问题(S1E17知识点备忘)