我知道当我们用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,则输出为this,我们输入“ test”:
ch[0]= //is it NULL?
ch[1]=t
ch[2]=e
ch[3]=s
ch[4]=t
我的意思是怎么回事?我认为ch [4]应该为NULL,而不是ch [0]。
(我在Visual Studio 2017中写作)
谢谢
最佳答案
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
。
关于c - 字符串数组末尾为NULL(C编程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48961994/