0
A
回答
1
考慮使用fgets
而不是scanf
。 scanf
可能會導致溢出,但您可以告訴fgets
您想要讀取的最大大小。如果您需要scanf
進行格式掃描,則仍然可以在fgets
之後使用sscanf
。
char * fgets (char * str, int num, FILE * stream);
1
你應該改變這個問題。你分配一個規定大小的緩衝區,並限制輸入,與scanf
的fgets
一樣。
#define SIZE 256
char buf[SIZE];
fgets(buf, SIZE, stdin);
或
scanf("%255s", buf);
,然後迭代讀取。
使用fgets
而不是scanf
取決於您的輸入是面向行的還是空間分隔的。並且... RTFM ...
+0
這一行:char buf [SIZE];將是一個c由於fgets會在緩衝區末尾添加一個終止'\ 0',所以該行應該是:char buf [SIZE + 1]; – user3629249 2014-10-27 23:00:20
+0
@ user3629249不,根據手冊頁* fgets()最多隻讀取一個小於流*中的大小字符。這裏最多可以讀取255個字符,並且會有一個終止'\ 0'的地方。 – 2014-10-28 06:45:21
相關問題
- 1. 從文件讀取或STDIN
- 2. C stdin無限讀取文件
- 3. 從stdin讀取
- 4. 從python重定向stdin讀取文件
- 5. 從STDIN讀取文件並寫入STDOUT
- 6. C - 嘗試從stdin讀取單個字符(和失敗)w/scanf/getchar
- 7. 在VS2008中使用scanf從重定向文件中讀取
- 8. 從C(scanf,fseek,fgets)中的文件讀取特定行數
- 9. 如何從鍵盤讀取stdin被設置爲C文件時
- 10. 使用proc_open從STDIN管道讀取
- 11. 從文件夾使用流讀取器讀取文件在c#
- 12. 可選擇從STDIN讀取C
- 13. 使用scanf讀取unsigned char
- 14. c等待stdin讀取?
- 15. 使用C++類從.txt文件讀取
- 16. Bash:從文件讀取stdin並將stdout寫入文件
- 17. 如何使用讀取功能從終端輸入(stdin)讀取?
- 18. 從scanf讀取換行
- 19. 使用scanf讀取C程序中的文本
- 20. 從stdin反覆讀取EOF
- 21. 從stdin與monkeyrunner讀取
- 22. 從Stdin讀取字符串
- 23. Ruby - 從STDIN讀取CSV
- 24. 從STDIN讀取的腳本
- 25. 從stdin讀取單行
- 26. Python PIL從STDIN讀取PNG
- 27. 從stdin停止讀取
- 28. C#PCL從文件讀取
- 29. C# - 從JSON文件讀取
- 30. 從文件中讀取。 C++
字符串需要char *。離開'&'。看看使用fgets而不是scanf。這將防止緩衝區溢出,但如果真的需要,你可以分配一個安全數量的字符來讀取,比如scanf(%255s「,input); – LeatherFace 2014-10-27 16:24:20
沒有誠實的說法。 – luk32 2014-10-27 16:24:31
建議每次讀取1行,並建立1000行的最大行長 - 至少是你認爲可能需要的2倍的值,然後使用'fgets()',緩衝區大小應爲1000 + 2 (或者可能是+3),可以編寫代碼來處理任意長的行,但IMO應該檢測到過長的行,並將其視爲錯誤代碼 – chux 2014-10-27 16:35:01