c - puts() 如何在没有\0 终止符的情况下找到数组的末尾?

标签 c arrays string memory-management dynamic-memory-allocation

在这段代码中:

int length = atoi(argv[1]);
char *tab = malloc(length * sizeof(char));
memset(tab, '-', length);
puts(tab);

无论我向 argv[1] 传递什么值,输出都是正确的。例如,对于 argv[1] = "5",我得到 -----(五个连字符)。

我想知道当我没有在 char 数组的末尾放置 '\0' 时,puts() 如何找到输入字符串的末尾秒。

最佳答案

@aschepler 说的。我猜某些东西——无论是操作系统还是你的 C 运行时或启动代码——在你 malloc 之前将内存清零。结果,由于您没有覆盖已经存在的 \0 字节,因此您的字符串以 null 结尾。不要假设这将永远有效!

编辑 不同的编译器、操作系统和库以不同方式初始化内存。 This question及其答案,同样this one , 给出一些初始化模式和其他模式写入内存以帮助调试的例子。结果至少有一个编译器 (IBM XLC) lets you choose the value for uninitialized automatics.

关于c - puts() 如何在没有\0 终止符的情况下找到数组的末尾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43820738/

相关文章:

c - Switch 语句没有达到我的预期

不能在 pthread 之间共享变量,值不同

java - 如何从文件的字节数组中获取文件名?

c - 删除/替换字符数组中的两个或多个连续字符

c++ - 在 C++ 中将罗马数字转换为标准数字

java - 将字符串替换为我想要的内容时遇到问题

我可以通过 C 套接字发送 json 数据吗?

用于游戏服务器的 C++ MySQL

用于保存任何维数组的 C++ 变量

java - 哈希表键和值存储在单独的数组列表中