#include <stdio.h>
int main()
{
char *p="hello";
char *p1;
p1=p;
while(*p1!='\0')
++*p1++;
printf("%s\t%s",p,p1);
}
输出应该是什么? 如何评估代码? 输出应该是ifmmp还是运行时错误?
答案 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";