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”时发生错误。似乎它不允许我将字符串复制到动态数组中。有谁知道是什么导致了这个错误?我该如何解决?
这里的问题是
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)应该符合标准。