
[英]printf somehow works without passing in variable for the format string C
[英]passing a string to printf, in c
将字符串传递给printf不能正常工作的代码:
char p[50];
scanf("%s", p);
printf(p, 10);
输入: value:%d\\n
预期输出: value:10
输出: value:10\\n
另外,我在不同的时间得到了不同的输出。 3次连续执行时,相同a.out的输出:
$。/ a.out的
value: %d\n
value:
$。/ a.out的
value:%d\n\n
value:10\n\n
$。/ a.out的
value:%d\n
value:10\n
在上面的value: %d\\n
是scanf的结果,下一行是printf的结果
非常小心与通过用户提供的文本作为第一个参数printf
,或者你将有一个格式化字符串漏洞 。 此外,通过使用裸scanf
,您还容易受到缓冲区溢出的影响 。 (仅三行代码就有两个漏洞!)
就是说,在输出中获得文字\\n
的原因是因为在控制台上键入\\n
时,您会得到一个带有文字反斜杠的字符串,后跟一个n
,而不是换行符。
另外,请注意scanf
停在任何空白处,因此输入value: xxx
将仅产生value:
进入缓冲区。 如果您想读取整行,则应改用fgets
类的函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.