分配值时字符串指针错误?

Dor*_*jay 3 c

我试图为字符串指针赋值.它正在编译并运行,但没有打印正确的答案?

char *x = "girl"; 
*x = x[3];
printf("%s\n",x);  
Run Code Online (Sandbox Code Playgroud)

为什么不打印"lirl"?

Mys*_*ial 5

你不能像这样修改字符串文字.这是未定义的行为.

你应该这样做:

char x[] = "girl"; 
x[0] = x[3];
printf("%s\n",x);  
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为"girl"现在是一个数组初始化器x[].这只是一个简短形式:

char x[] = {'g', 'i', 'r', 'l', '\0'}; 
Run Code Online (Sandbox Code Playgroud)

所以这是允许的.