c - 为什么 printf 打印一个未作为参数传递的变量?

标签 c arrays printf c-strings string-literals

好久没写C代码了,生疏了。有人知道为什么以下代码将“rtyaze”打印到标准输出吗?我期待着“rty”。

#include <stdio.h>

int main (void) {
  char s[] = "aze";
  char ss[][3] = { "rty" };
  printf("%s\n", ss[0]);
}

最佳答案

通过使 ss 第一个元素处的字符串具有 3 个字符,您可以消除空终止符。

因此 printf 继续执行,直到找到空终止符。碰巧,您的另一个字符串一定是紧接在第一个字符串之后放置在内存中的。

如果将 ss[][3] 中的 3 更改为 4,您应该会得到预期的行为。

关于c - 为什么 printf 打印一个未作为参数传递的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56759637/

相关文章:

c - 在 Unix 上的 C 中,进程如何在不打开文件的情况下知道它对文件具有哪些权限?

arrays - 从二进制值转换为原始数组值

python - 包含 numpy 范围内的数字

php - 带 printf 的千位分隔符

php - PHP sprintf 中使用的该格式字符串的解释

c - gstreamer rtsp h264 depayloader中的字节流和打包流有什么区别

c - LINUX Kill_pid 失败

c - 比 if-else if 更好的解决方案?

JavaScript 将数组值除以 Int

c - c中的printf函数