0

我有这个代码:

char* str = (char*)malloc(27);
int num = strlen(str);

我已经在 debag 模式下运行了程序,我看到 num 等于 40。为什么?为什么不是27?

4

1 回答 1

7

因为malloc()不会初始化分配的内存(即使它确实将它归零也无济于事)并且strlen()取决于空终止字符的存在。只有strlen()在遇到空终止字符时才会停止计数,在这种情况下,它在分配的内存之后 13 个字节(在不应该在的地方读取)。不获取数组或从 a (或任何其他动态分配函数)分配的字节数。例如:strlen()sizeofmalloc()

char buf[32] = "hello";   /* Implicit null terminating character after 'o'. */
assert(5 == strlen(buf)); /* It does not equal 32. */
于 2013-07-04T17:19:13.040 回答