我已经编写了两段代码,我打算使用相同的输出,但令人困惑的是,它们具有不同的输出。
第一段代码:
#include<stdio.h>
int main(){
char a[]="abc";
char *p=&a;
char c=++(*p);
printf("%c,%s\n",c,p);
return 0;
}
这输出以下内容:
B,BBC
第二段代码:
#include<stdio.h>
int main(){
char *p="abc";
char c=++(*p);
printf("%c,%s\n",c,p);
return 0;
}
哪个输出:
一个,ABC
第二段代码中发生了什么阻止字符串的第一个字符递增?
答案 0 :(得分:4)
第二个示例尝试更改未定义行为的字符串文字。你通常会因此而崩溃,但在你的情况下似乎只是“被忽略”。
char *p="abc"; char c=++(*p); /* Illegal to change *p. */
标准报价:
未指定这些数组是否提供不同 他们的元素具有适当的值。如果是程序 试图修改这样的数组,行为是未定义的。