下面的代码似乎有段错误,我不明白为什么。
#include <string.h>
static char src[] = "aaa";
int main()
{
char* target[2] = {"cccc","bbbbbbbbbb"};
strcpy(target[1],src);
return 0;
}
最佳答案
因为 target[1]
是指向 "bbbbbbbbbb"
的指针,并且不允许修改字符串常量。这是未定义的行为。
这与以下没有什么不同:
char *x = "bbb";
x[0] = 'a';
我认为您可能将它与以下内容混淆了:
char x[] = "bbb";
x[0] = 'a';
哪个是有效的,因为它创建了一个您可以修改的数组。但是你的给你的是:
char* target[2] = {"cccc","bbbbbbbbbb"};
是一个指针数组,所有指针都指向不可修改的内存。
如果你要尝试:
char t0[] = "cccc";
char t1[] = "bbbbbbbbbb";
char* target[2] = {t0, t1};
strcpy(target[1],src);
您会发现它可以工作,因为 target[1]
现在指向 t1
,它是可修改的。
关于c - 为什么 C 的 strcpy 对于双索引数组会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5073521/