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

标签 c arrays printf format-specifiers

我偶然发现了这种行为,我很想理解。

我错误地在程序末尾编写了以下内容来打印 char 数组中的元素:

printf("output: %s",outputText[]);

当我应该(并且最终确实)迭代数组并打印每个元素时,如下所示:

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

        printf("%c",outputText[i]);
    }

促使我实现后者的是我得到的输出。尽管初始化数组以将字符限制为 outputText[textLength] ,确保数组中没有意外的元素,我在实现以前的代码时的输出总是会散布着额外的怪异元素,如下所示:

spooky character additions

我刚刚连续运行同一个程序三次,并在数组末尾附加了三个随机字符。

(编辑以替换第一个示例中的 outputText[] --> outputText。)

最佳答案

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

如果将数组的最后一个元素设置为 NUL,printf 将在此处完成。

关于c - 为什么使用 "%s"格式说明符 printf 一个字符数组会在数组中的最后一个字符之后输出额外的无意义值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44177748/

相关文章:

c++ - 为什么共享库符号中定义的符号没有被使用?

c - 并发标志集是否需要#pragma omp atomic?

Ruby 代码优化 : select from array

C 将整数转换为字符串

c - printf 似乎在永远循环之前工作不同

c - 为什么 GCC 不优化对 printf 的调用?

c - argp 和 getopt 有什么区别?

c++ - 从单独的库调用 swprint 失败

javascript - 将包含对象数组的 javascript 对象格式化为数组数组

JavaScript嵌套数组过滤问题