如何在C中评估以下代码?

时间:2015-07-13 16:32:59

标签: c

#include <stdio.h>

int main()
{
    char *p="hello";
    char *p1;
    p1=p;
    while(*p1!='\0')
        ++*p1++;

    printf("%s\t%s",p,p1);
}

输出应该是什么? 如何评估代码? 输出应该是ifmmp还是运行时错误?

1 个答案:

答案 0 :(得分:2)

main的正文中修改字符串文字时,您正在调用未定义的行为

char *p = "hello";
char *p1;

p1 = p;
while (*p1 != '\0')
    ++*p1++; // Undefined behavior

以下声明:

++*p1++;

与:

相同
++(*(p1++));

它可以写成两个陈述:

++(*p1);  // increase *p1 by one
p1++;     // increase p1 by one

如果您希望输出为ifmmp(即每个字母都被下一个字母替换),则更改:

char *p = "hello";

使用:

char p[] = "hello";