我有这个代码:
char* str = (char*)malloc(27);
int num = strlen(str);
Run Code Online (Sandbox Code Playgroud)
我已经在debag模式下运行程序,我已经看到num等于40.为什么?为什么不是27?
因为malloc()没有初始化分配的内存(即使它确实将它归零,也没有帮助)并且strlen()取决于是否存在空终止字符.只有在遇到空终止字符时strlen()才会停止计数,在这种情况下,它在分配的内存之后是13个字节(在不应该的地方读取).没有获得从(或任何其他动态分配函数)分配的数组或字节数.例如:strlen()sizeofmalloc()
char buf[32] = "hello"; /* Implicit null terminating character after 'o'. */
assert(5 == strlen(buf)); /* It does not equal 32. */
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
90 次 |
| 最近记录: |