[英]scanf and printf not printing right values
這里發生了什么? 代碼如下:
#include<stdio.h>
#include<string.h>
int main()
{
char name[15];
char name_[15];
char answ[1];
printf("What's your name?\n");
scanf("%s", name);
strcpy(name_, name);
printf("Yes / No: ");
scanf("%s", answ);
printf("Hello! %s\n", name_);
printf("You said: %s\n", answ);
return 0;
}
輸入“名稱”和“是”,預期的 output 是它說:
你好! 姓名
你說:是的
相反,我得到:
你好! es
你說:是的
我還嘗試在 %s 之前添加空格,但沒有結果。
那么我到底錯過了什么?
answ
只能包含 1 個字符。 所以目前,額外的字符"es"
+ '\0'
被寫入分配給name_
的 memory 中。 因此, "es"
被打印出來。
您已經創建了一個經典的可利用緩沖區溢出,但在您的代碼中。 這就是為什么大多數現代編譯器會建議您將 sscanf 交換為 sscanf_s 或類似的。 正如其他人指出的那樣,您會覆蓋堆棧上的下一個變量。
我想提供這個答案基本上是說:永遠不要使用 sscanf 或任何過時的、不安全的 C 函數。 即使這可能只是一個玩具示例,也請練習編寫現代 C 代碼。 從長遠來看,您將從中受益。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.