马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
原代码#include <stdio.h>
#define PIVALUE 3.1415926535
#define PI "π"
#define MAKER "风眠"
#define YEAR 2023
#define MONTH 9
#define DAY 30
int main() {
printf("%s = %d\n", PI, PIVALUE);
printf("maker: %s\n", MAKER);
printf("year: %d\n", YEAR);
printf("month: %d\n", MONTH);
printf("day: %d\n", DAY);
return 0;
}
结果./test
π = -1735908376
maker: 风眠
year: 2023
month: 9
day: 30
加了\0后:#include <stdio.h>
#define PIVALUE 3.1415926535
#define PI "π"
#define MAKER "风眠"
#define YEAR 2023
#define MONTH 9
#define DAY 30
int main() {
printf("%s = %d\n", PI, PIVALUE);
printf("ma\0ker: %s\n", MAKER);//这里加了\0
printf("year: %d\n", YEAR);
printf("month: %d\n", MONTH);
printf("day: %d\n", DAY);
return 0;
}
结果./test1
π = -38303256
mayear: 2023
month: 9
day: 30
所以,“ker:%s\n”直接被忽略了?
前三楼都是chatgpt回答的。
gcc编译的时候应该并没有直接跳转到下一行, printf("ma\0ker: %s\n", MAKER);
这一个句子应该是直接编译到exe程序中的。
然而,这个函数中有一个字符串常量 "ma\0ker: %s\n",在printf函数执行的时候,他一旦遇到'\0'就认为这个字符串结束了,然后就退出了。
所以说只打印了"ma"
|