我正在学习C,由于某种原因,我的%s
并没有打印出类似的内容。它只是随机字符,%d
它总是打印一个像4600688那样的数字,而不是像我设置的那样:
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("why is %s happening to me"), "this";
return 0;
}
这导致:
为什么PE会发生在我身上
(以及return
文字)。
这是编译错误还是我该如何解决?
答案 0 :(得分:7)
在您的代码中
printf("why is %s happening to me"), "this";
应该是
printf("why is %s happening to me", "this");
否则,您正在调用undefined behavior,因为%s
函数签名要求提供printf()
转换说明符所需的参数。
引用C11
,章节§7.21.6.3
#include <stdio.h> int printf(const char * restrict format, ...);
printf
函数等同于fprintf
,其中插入了参数stdout
在printf
的参数之前。
,并且,从§7.21.6.1开始,“fprintf
函数”(强调我的)
fprintf
函数将输出写入stream
所指向的流,受控制format
指向的字符串,指定后续参数的方式 转换为输出。如果格式的参数不足,则行为是 未定义。强>
也就是说,这很好,因为 语法 有效,感谢(或责备)comma-operator。