修改和打印字符串不会产生预期的输出

时间:2012-04-02 16:02:09

标签: c pointers

我已经编写了两段代码,我打算使用相同的输出,但令人困惑的是,它们具有不同的输出。

第一段代码:

#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

第二段代码中发生了什么阻止字符串的第一个字符递增?

1 个答案:

答案 0 :(得分:4)

第二个示例尝试更改未定义行为的字符串文字。你通常会因此而崩溃,但在你的情况下似乎只是“被忽略”。

char *p="abc";
char c=++(*p); /* Illegal to change *p. */

标准报价:

  

未指定这些数组是否提供不同   他们的元素具有适当的值。如果是程序   试图修改这样的数组,行为是未定义的。