- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
int index = 0;
FILE *fptr;
fptr = fopen("File.txt", "w");
char arr[] = {'A', '\b', 'B', '\b', 'C', '\b', '\b', '\n'};
while(arr[index] != '\0'){
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'};
数组末尾没有附加明确的\0
。所以,
while(arr[index] != '\0')
在错误的前提下运行并访问超出范围的内存。它调用undefined behavior .
引用 C11
,第 §6.7.9 章
If an array of unknown size is initialized, its size is determined by the largest indexed element with an explicit initializer. The array type is completed at the end of its initializer list.
另一方面,使用字符串文字初始化数组会自动将空终止符放在末尾,正如该章中提到的
An array of character type may be initialized by a character string literal or UTF−8 string literal, optionally enclosed in braces. Successive bytes of the string literal (including the terminating null character if there is room or if the array is of unknown size) initialize the elements of the array.
所以,要么
\0
作为初始值设定项列表的最后一个元素sizeof(arr)/sizeof(arr[0])
或类似方法。关于c - 解释一下程序中fprintf()的奇怪行为,在文件中打印一些不寻常的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37399748/
我是一名优秀的程序员,十分优秀!