为什么%s没被赋予垃圾值?

起初是打印字符串“%s! C is cool!\n”时发现%s没有被打印出来,
#include <stdio.h>

#define FORMAT "%s! C is cool!\n"
void main(void)
{
printf(FORMAT);
return 0;
}

img

我的思考过程

我起初分析是因为%s不会产生垃圾值,于是尝试了

img


于是这个想法不成立
之后我根据这个结果再次分析没有产生垃圾值的原因是后面没有对应的类型常量,所以尝试把%s换成了 %d,结果%d居然产生了垃圾值。

img

所以我想要知道%s为什么没被当作字符串中的一部分,也没被赋予垃圾值。

你的mian函数是void类型,但是返回了0。不要用void main这种老式写法啦,直接用int main()就可以了

不同编译器实现不同吧?VS2019打印出了乱码

img


包括%d也有

img


可以看到编译器下面会报警告,因为你没有给%s和%d传参

img


而且因为%不是一个转义字符,当前情况下,你不能把它当作字符串打印出来

img


只有把它放入一个真的字符串中,才能被识别并正常打印

img