我偶然发现了我很想理解的这种行为。
我在一个程序的末尾错误地写了下面的代码来打印char
数组中的元素:
printf("output: %s",outputText[]);
当我应该(并且最终确实)迭代数组并打印每个元素时:
for(int i = 0; i < textLength; i++){
printf("%c",outputText[i]);
}
促使我实施后者的是我得到的输出。尽管初始化数组以将字符限制为outputText[textLength]
,但确保数组中没有意外的元素,实现前一代码时的输出总是会被其他怪异的元素所占据,如下所示:
我只是连续三次运行同一个程序,并在我的数组末尾附加了三个随机字符。
(在第一个示例中,编辑以替换outputText[]
- &gt; outputText
。)
答案 0 :(得分:5)
%s
用于字符串;字符串是以NUL结尾的字符数组(十六进制为0x00,或'\0'
为字符),因此printf()
将打印,直到找到NUL!
如果您将数组的最后一个元素设置为NUL,printf
将在那里完成。
答案 1 :(得分:2)
您可能缺少'\0'
字符作为标记字符串结尾的字符数组的元素。
答案 2 :(得分:1)
您缺少字符串终止字符\0
字符串的结尾。所以,让你的字符串\0
终止。像:
outputText[textLength-1] = '\0';