-5
A
回答
2
讓我們把它分解:
scanf("%*[\n]%[^\n]",arr);
%*[\n]
指導scanf函數來讀取是'\n'
任何字符。 *
表示不保存任何內容。如果它不讀取至少1個字符,則scanf()
將返回EOF。繼續到EOF
或直到下一個字符不是'\n'
。
%[^\n]
指示scanf讀取任何不是'\n'
的字符。這些值保存在arr
指示的內存中。這一直持續到下一個字符是'\n'
或發生EOF。如果沒有讀取字符,則返回0(或EOF)。如果至少一個被讀取,並且沒有錯誤,做的時候,一個\0
附加和scanf()
返回1
OP的代碼不是好代碼,因爲沒有輸入的限制。以下會更好。使用fgets()
甚至更好。
char arr[10];
scanf("%*[\n]%9[^\n]",arr);
2
在C,scanf
常常用於填充char
陣列。也就是說,arr
是一個數組,聲明如下:
char arr[99];
當作爲參數傳遞給函數,it's converted to a pointer to first element供給。也就是說,scanf
收到一個指向數組的第一個元素的指針,就像它期望的格式說明符%[
一樣。
順便說一句,這是一個可能的緩衝區溢出的例子。本示例讀取一行文本。如果行很長(在我的例子中大於98字節),scanf
會導致緩衝區溢出。您的示例實際上做了與gets
非常相似的操作,因爲它可能會導致超限(並且無法防止),因此已棄用。如所描述的那樣使用您的格式的邊界。 here。
相關問題
- 1. Scanf語句
- 2. 爲什麼這個scanf語句導致分段錯誤?
- 3. scanf()在if語句中不起作用
- 4. Scanf未掃描%c字符,但跳過了語句,爲什麼?
- 5. 爲什麼我的scanf語句中的空格有所作爲?
- 6. 爲什麼需要這個return語句?
- 7. 爲什麼我不需要使用scanf符號? (在C)
- 8. scanf說明符「n」是什麼數字?
- 9. 爲什麼scanf需要&?
- 10. 這是什麼意思「scanf(」%[^ \ n]「,buf);」 ?它的等價C++語法是什麼?
- 11. C代碼掛在scanf()語句
- 12. MATLAB語句是什麼:[M N〜] = size(imge);?
- 13. 爲什麼「int arr [n];」當索引「n」稍後要被scanf()輸入時,導致我的程序掛起?
- 14. 爲什麼python中的try語句需要else子句?
- 15. 爲什麼&在這個if語句中?
- 16. 爲什麼在這裏不需要return語句?
- 17. scanf(「%[^ \ n]」)被跳過
- 18. 爲什麼在scanf中不需要address操作符?
- 19. 爲什麼需要查看using語句
- 20. INSERT語句後需要什麼?
- 21. 爲什麼我不需要括號for循環和if語句
- 22. 爲什麼這個scanf返回false?
- 23. 這個SELECT語句有什麼問題?
- 24. 我需要什麼樣的JOIN語句?
- 25. 這條語句(line,str)= str.split(「\ n」,1)是什麼意思?
- 26. 什麼是更準確的平均方法,ARR [0]/N + ARR [1]/N ... + ARR [N-1]/N或(ARR [0] + ARR [1] ... + ARR [N-1])/ N爲雙倍?
- 27. 爲什麼這個bash「if」語句執行兩條語句
- 28. select語句:N的關係
- 29. T-SQL GO語句n次
- 30. SQL - n層聯接語句
我投票結束這個問題作爲題外話,因爲發佈完整的代碼。 –
一個更好的問題是告訴我們你的想法,你爲什麼這麼想,如果程序的行爲與你的期望不符,請以更明確的方式尋求具體的幫助。 –
你需要看看如何聲明'arr'。 – FredK