我知道我们在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年的视觉工作室写作) 谢谢
答案 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);