|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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"
|
|