1
A
回答
6
問題當然是不是 OP的意圖。
的OP請求
"%255[^\0]s" // a seemingly format specifier %255[^\0] and the letter 's'
"%255c"
當然格式
之間的sscanf(buf, format, dest)
差OP想要的格式
的之間
"%255[^\0]" // a seemingly format specifier %255[^\0]
"%255c"
OR
"%255s" // format specifier %255s
"%255c"
的
sscanf(buf, format, dest)
差異是
而不是人們可能會想到的格式。這是
相同格式
"%255[^"
。
sscanf()
不知道有東西通過顯式空字符
'\0'
。由於格式說明符以
[
開頭,但不以匹配
]
結尾,因此它是無效的說明符。 「如果轉換規範無效,
行爲未定義。」
這也適用於原始"%255[^\0]s"
:行爲是undefined。
以下是強烈的突出問題"%255s"
和"%255c"
"%255c"
之間
-
不消耗領先的空格。
"%255c"
會掃描空格並將它們保存到dest
。"%255s"
,它發現一個非空白區域後,將停止掃描,如果它遇到一個空白區域。- 兩者都將掃描最多255個字符,並將掃描的字符放入
dest
。 "%255c"
不不追加\0
所以dest
應與255char
應對。"%255s"
,如果它掃描至少1炭,將追加一個\0
,所以dest
應與256char
應付。- 既不會掃描
\0
掃描buf
停止\0
在sscanf()
。"%255c"
將在fscanf()
中掃描\0
。這是不常見的,因爲fscanf()
在文件中有\0
時使用得並不多。
"%255s"
確實消耗無限領先的空白,掃描它們,但是
不是將它們保存到
dest
。
如果出現任何速度差異,肯定是取決於實施。
1
不能確定速度,但結果有差異。
首先,%255c
會(假設您正在掃描的字符串中至少有255個字符)讀取255個字符,而不管它們是什麼。另一方面,%255[^\0]s
將讀取多達255個非空白個字符。
其次,因爲字符串已被\0
終止,所以正則表達式的[^\0]
部分是多餘的,因爲sscanf
決不會將空終止符視爲字符串的一部分。
相關問題
- 1. HSV(0 .. 255)RGB(0 .. 255)
- 2. 差(/ \ S /)和$ .TYPE(/ \ s /)
- 3. IP地址驗證爲0-255和點
- 4. 差[0] ++ ++和常用3 [0]
- 5. 獲取RGB值(0..255)
- 6. 差分串S =空
- 7. 它是0和-0之間的差異
- 8. 如何將數組值0和255轉換爲相應的0和1陣列
- 9. 西格瑪和偏差0
- 10. 差(0)和時間戳(6)
- 11. 差[0]
- 12. Java字符串格式:「%0」和「d%s」
- 13. 是否有/ \ S/G和/ \ S + /克之間的差?
- 14. 的Java轉換0-255 INT-RGB色
- 15. 像素顏色計算255到0
- 16. 範圍從0到255的整數
- 17. 每個像素的光強0..255?
- 18. 差(DD,DATEDIFF(DD,0,DateColumn()),0)
- 19. 差異[0]
- 20. Matlab RGB顏色表示([255 255 255]和[1 1 1])
- 21. div與填充0和邊框0之間的差距0
- 22. 高效創建0和255的棋盤圖案
- 23. 在文件中搜索IP地址x.x.x.0和x.x.x.255
- 24. 檢測是否NSNumber介於0和255之間
- 25. 差異= 0
- 26. 在0-127範圍內的阿爾法數0-255相當於
- 27. 延時輸出0's
- 28. 定位div |嵌套0s
- 29. 的printf(%S)打印0
- 30. s [i]的使用 - '0'
與'\ 0'位的好處。 –
+1:使用'gcc -Wall -Wextra -c x13.c'編譯,會得到如下警告:'x13.c:函數'main':'和0x35: ']'代表'%['format'和 'x13.c:9:警告:嵌入的'\ 0'格式。它並不完全清楚'scanf()'做了什麼,但是因爲行爲未定義,所以任何事情都可以。 –
多汁的答案!標記爲正確。 – CHRIS