在动态数组上使用 strcpy

And*_* Lu 1 c arrays string pointers strcpy

我有一个关于以下代码的基本问题:

int main() {
    char *sNext1="DABCD";
    char Tmp[]="";
    strcpy(Tmp, sNext1);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

运行“strcpy”时发生错误。似乎它不允许我将字符串复制到动态数组中。有谁知道是什么导致了这个错误?我该如何解决?

Sou*_*osh 5

这里的问题是

 char Tmp[]="";
Run Code Online (Sandbox Code Playgroud)

这里,Tmp不是一个动态数组,它以与阵列恰好一个元件(经由初始化初始化)。当您将其用作 的目标时strcpy(),您将超出缓冲区。基本上,您的代码尝试访问越界内存,这会调用undefined behavior

相关,引用C11,第 7.24.2.3 章strcpy()强调我的

strcpy函数将 指向的字符串s2 (包括终止空字符)复制到 指向的数组中s1。[...]

然后,对于“字符串函数约定”,第 7.24.1 节,

[....] 如果在对象末尾之外访问数组,则行为未定义。

解决方案:您需要确保Tmp有足够的内存来保存要复制到其中的内容,包括空终止符。

也就是说,对于托管环境,int main()至少int main(void)应该符合标准。