con*_*ter 3 c arrays pointers cstring strcpy
以下代码似乎是段错误,我无法弄清楚原因.
#include <string.h>
static char src[] = "aaa";
int main()
{
char* target[2] = {"cccc","bbbbbbbbbb"};
strcpy(target[1],src);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
pax*_*blo 11
因为target[1]是一个指针"bbbbbbbbbb",你不能修改字符串常量.这是未定义的行为.
它与以下内容没有什么不同:
char *x = "bbb";
x[0] = 'a';
Run Code Online (Sandbox Code Playgroud)
我想你可能会混淆它:
char x[] = "bbb";
x[0] = 'a';
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为它创建了一个允许您修改的数组.但是你的东西给了你:
char* target[2] = {"cccc","bbbbbbbbbb"};
Run Code Online (Sandbox Code Playgroud)
是一个指针数组,所有这些都指向不可修改的内存.
如果您尝试:
char t0[] = "cccc";
char t1[] = "bbbbbbbbbb";
char* target[2] = {t0, t1};
strcpy(target[1],src);
Run Code Online (Sandbox Code Playgroud)
你会发现它target[1]现在有效t1,可以修改.