![](/img/trans.png)
[英]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.