在这段代码中:
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/