我偶然发现了这种行为,我很想理解。
我错误地在程序末尾编写了以下内容来打印 char
数组中的元素:
printf("output: %s",outputText[]);
当我应该(并且最终确实)迭代数组并打印每个元素时,如下所示:
for(int i = 0; i < textLength; i++){
printf("%c",outputText[i]);
}
促使我实现后者的是我得到的输出。尽管初始化数组以将字符限制为 outputText[textLength]
,确保数组中没有意外的元素,我在实现以前的代码时的输出总是会散布着额外的怪异元素,如下所示:
我刚刚连续运行同一个程序三次,并在数组末尾附加了三个随机字符。
(编辑以替换第一个示例中的 outputText[]
--> outputText
。)
最佳答案
%s
用于字符串;字符串是以 NUL 结尾的字符数组(十六进制为 0x00,或作为字符的 '\0'
),因此 printf()
将打印直到找到 NUL !
如果将数组的最后一个元素设置为 NUL,printf
将在此处完成。
关于c - 为什么使用 "%s"格式说明符 printf 一个字符数组会在数组中的最后一个字符之后输出额外的无意义值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44177748/