这段代码的功能是创建一个长度为2的字符串数组:
char* CreateArr()
{
char *new_arr = NULL;
void *test_arr = malloc(2 * sizeof(char));
if (!test_arr)
{
printf("ERROR!");
exit(0);
}
else
new_arr = test_arr;
int test_len = strlen(new_arr);
return new_arr;
}
但是测试发现test_len是6,这是为什么呢?
这里要涉及到编译原理的问题,简单来说可以这样理解:
malloc的分配的内存没有初始化,不知道何处会有个 '\ 0',但是strlen()只有找到'\ 0',才会返回串的长度(测试发现test_len是6,这里明显已经出现越界访问了