我想知道为什么在Eclipse中使用内部CDT构建器我可以做到这一点
char *data = 0;
char data2[20] = "Hello";
strncpy(data, data2, 10);
但在视觉工作室我必须这样做
char *data = malloc(20);
char data2[20] = "Hello";
strncpy(data, data2, 10);
正如你所看到的,我必须在visual studio中使用malloc()
,否则我会对内存进行访问冲突,但为什么我不需要在eclipse中使用它?
答案 0 :(得分:2)
对于大多数案例,
char *data = 0;
与
相同 char *data = NULL;
然后,您正在使用NULL
指针(即无效的地址,您不认为访问)作为{的目标{1}}。它是undefined behavior
详见strncpy()
,章节§7.1.4,使用库函数
[....] 如果函数的参数具有无效值(例如值 在函数域之外,或者程序地址空间之外的指针, 或一个空指针,或指向不可修改的存储时的对应 参数不是const限定的)或函数不期望的类型(提升后) 如果参数数量可变,行为未定义。 [...]