mys*_*chu 1 c arrays string memory-management dynamic-memory-allocation
在这段代码中:
int length = atoi(argv[1]);
char *tab = malloc(length * sizeof(char));
memset(tab, '-', length);
puts(tab);
Run Code Online (Sandbox Code Playgroud)
无论我传递什么价值argv[1],输出都是正确的.例如,argv[1] = "5"我得到-----(五个连字符).
我想知道puts()当我没有在我的数组的末尾放置'\ 0'时如何找到输入字符串的结尾char.
@aschepler说的是什么.我猜测某些东西 - 操作系统或你的C运行时或启动代码 - 在malloc它之前将内存归零.因此,由于您没有覆盖\0已存在的字节,因此您的字符串以空值终止.不要以为这总是有效!
编辑不同的编译器,操作系统和库以不同方式初始化内存. 这个问题及其答案,以及同样的问题,给出了一些初始化模式和写入内存的其他模式的例子,以帮助调试.事实证明,至少有一个编译器(IBM XLC)允许您为未初始化的自动变量选择值.
| 归档时间: |
|
| 查看次数: |
125 次 |
| 最近记录: |