不同IDE中的strncpy行为

时间:2017-12-07 12:32:28

标签: c string memory malloc

我想知道为什么在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中使用它?

1 个答案:

答案 0 :(得分:2)

对于大多数案例,

  char *data = 0;

相同
  char *data = NULL;

然后,您正在使用NULL指针(即无效的地址,您不认为访问)作为{的目标{1}}。它是undefined behavior

详见strncpy(),章节§7.1.4,使用库函数

  

[....] 如果函数的参数具有无效值(例如值   在函数域之外,或者程序地址空间之外的指针,   或一个空指针,或指向不可修改的存储时的对应   参数不是const限定的)或函数不期望的类型(提升后)   如果参数数量可变,行为未定义。 [...]