我正在使用的编译器是Dev C++ 5.11。TDM-GCC 4.9.2 32位调试版本。使用C99模式。
1.
char str1[100], str2[100];
scanf("%s %s", &str1, &str2);
printf("%s %s", &str1, &str2);
2.
char str1[100], str2[100];
scanf("%s %s", &str1, &str2);
printf("%s %s", str1, str2);
3.
char str1[100], str2[100];
scanf("%s %s", str1, str2);
printf("%s %s", str1, str2);
每段代码都有效。为什么?我非常困惑。
scanf("%s %s", &str1 + 1, &str2 + 1)
(这个肯定有未定义行为)和scanf("%s %s", str1 + 1, str2 + 1)
(只有当用户输入过多数据时才会有未定义行为)。我将把为什么潜在差异更加明显留给你自己思考。 - Peter