字符串数组末尾为NULL(C编程)

时间:2018-02-24 10:51:32

标签: c arrays pointers null

我知道我们在C:

中编写这样的代码
char a[] = "test";
for (int i = 0; i<5; i++)
  printf("ch[%d]=%c\n", i, a[i]);

输出将是:

ch[0]=t
ch[1]=e
ch[2]=s
ch[3]=t
ch[4]=    //null \0

但是当我用这样的动态数组指针(用于练习和学习目的)编写它时,我不理解NULL位置:

char *ch;
int n, i;
printf("Enter size of your array:");
scanf_s("%d", &n);

ch = (char*)malloc(sizeof(ch)*n);

for(i=0;i<n;i++)
    scanf_s("%c", ch+i);
for (i = 0; i<n; i++)
    printf("ch[%d]=%c\n", i,ch[i]);

因为如果n == 5,输出就是这个,我们输入&#34; test&#34;:

ch[0]=    //is it NULL?
ch[1]=t
ch[2]=e
ch[3]=s
ch[4]=t    

我的意思是发生了什么?我认为ch [4]应该是NULL而不是ch [0]。 (我在2017年的视觉工作室写作) 谢谢

2 个答案:

答案 0 :(得分:0)

scanf首先从第一个scanf获取您输入的换行符。 ch[0]是换行符。

考虑另一个例子:

Enter size of your array:4e
test
ch[0]=e
ch[1]=

ch[2]=t
ch[3]=e

首先读取e之后的4并将其放入数组中。

要刷新,请在第一个while(getchar() != '\n') {}循环之前添加for

答案 1 :(得分:0)

在@BartFriederichs的帮助下,问题解决了。 而不是scanf_s(&#34;%d&#34;,&amp; n); 我应该在%d之后放一个空格,这样就不会读新行了

    scanf_s("%d ",&n);