int index = 0;
FILE *fptr;
fptr = fopen("File.txt", "w");
char arr[] = {'A', 'b', 'B', 'b', 'C', 'b', 'b', 'n'};
while(arr[index] != ' '){
fprintf(fptr, "%c", arr[index++]);
}
这里,文件的输出是
A|BS|B|BS|C|BS||BS|
hDC2¦v
|BS|是一个退格字符,为了清晰起见,我这样写。我不明白为什么显示第二行输出。
当您使用大括号括起的初始化器列表(如)初始化数组时
char arr[] = {'A', 'b', 'B', 'b', 'C', 'b', 'b', 'n'};
在数组的末尾没有附加明确的CCD_ 1。所以,
while(arr[index] != ' ')
在错误前提下运行并访问超出绑定的内存。它调用未定义的行为。
引用C11
,第6.7.9章
如果初始化了未知大小的数组,则其大小由索引的最大值决定具有显式初始值设定项的元素。数组类型在其末尾完成初始值设定项列表。
另一方面,用字符串文字初始化数组会自动将空终止符放在末尾,正如中提到的那样
字符类型的数组可以由字符串文字或UTF−8字符串初始化文字,可选地用大括号括起来。字符串文字的连续字节(包括如果有空间或数组大小未知,则终止null字符)初始化数组的元素。
因此,
- 添加