为什么使用"%s"格式说明符printf一个char数组在数组中的最后一个char之后输出额外的无意义值?

zan*_*iku -3 c arrays printf format-specifiers

我偶然发现了我很好理解的这种行为.

我错误地在程序结束时编写了以下内容,以便在以下数组中打印元素char:

printf("output: %s",outputText[]);
Run Code Online (Sandbox Code Playgroud)

当我应该(并最终)迭代数组并打印每个元素时:

for(int i = 0; i < textLength; i++){

        printf("%c",outputText[i]);
    }
Run Code Online (Sandbox Code Playgroud)

促使我实施后者的是我得到的输出.尽管初始化数组以限制字符outputText[textLength],确保数组中没有意外的元素,但是在实现前一代码时我的输出总是会被其他怪异的元素所占据,如下所示:

怪异的角色补充

我只是连续三次运行相同的程序,并在我的数组末尾附加了三个随机字符.

(编辑替换outputText[]- > outputText在第一个示例中.)

Gus*_*ano 5

%s用于字符串; 字符串是以NUL结尾的字符数组(十六进制'\0'为0x00,或作为字符),因此printf()将打印直到找到NUL!

如果将数组的最后一个元素设置为NUL,printf则会在那里完成.