我有一个程序,它在不同的编译器上提供不同的输出。
#include<stdio.h>
int main()
{
char arr[] = "abcdef";
char *p = arr;
while(*p != '\0')
{
char b = *p;
*p++ = *(p+1);
*p++ = b;
}
printf(" %s", arr);
getchar();
return 0;
}
当我使用gcc编译器编译它时,它会输出“badcfe”。 但是当使用其他编译器时,它会给出“caec”。 有人可以帮我解决它有两个不同的输出(有解释)。
答案 0 :(得分:4)
*p++ = *(p+1)
将被评估为*(p++) = *(p+1)
。
整个表达式的行为是 undefined ,因为您正在未序列步骤中读取和写入p
。所以编译器在遇到这个表达式时可以做任何想做的事情,这可以解释你正在观察的输出的差异。
&#34; undefinedness&#34;类似于未填充的i = i++;
,表示整数类型i
。