我使用與fgets最初解析文件一行一行。現在我改變了一些東西,以便我已經將整個文件放入緩衝區。爲了解析目的,我仍然喜歡逐行閱讀該緩衝區。有什麼專門爲這一點,或者我需要做一個循環,在這個點的0x0A檢查char
S'相當於緩衝區上的fgets?
回答
memchr
(具有自己的包裝器代碼一點點,與memcpy
結束)是完全等效 - 像fgets
它需要一個最大長度它將處理(應該是剩餘的輸入緩衝器大小的最小和的大小的您的輸出緩衝區)並進行掃描,直至達到所需字符(將爲'\n'
)或耗盡輸入/輸出空間。
注意,對於已經在內存緩衝區的數據,不過,你可能想複製的步驟跳到一個單獨的輸出緩衝器,除非你需要用空字符結束的輸出,而無需修改輸入。許多新手C程序員經常犯這個錯誤,他們認爲他們需要空終止,只需改進一些接口就可以使用(指針,長度)對,從而允許您在不復制的情況下傳遞/處理子字符串他們。例如,你可以使用:printf("%.*s", (int)length, start);
感謝您指出'memchr'。我從來沒有使用過,但之前使用過'strrchr',這非常方便。謝謝 –
有sscanf的可能會或可能不會爲你工作。
您可以使用sscanf
功能這一點。如果你真的需要一整行,這樣的事情應該做的伎倆:
sscanf(your_buffer, "%50[^\n]", line);
(這將讀取行最多50個字符長的像往常一樣,小心的長度和0
終止並檢查返回值。 )
您可以使用指針算術來移動緩衝區(只需添加「返回」行長度+ 1)。
如果您要查找C函數,strtok()
和strsep()
都將在指定字符上拆分字符串。
我知道'strtok'會修改底層的字符串,這可能不適合這個任務,'strstep'是什麼? –
是的,這兩個函數都修改了字符串。如果你不需要,你需要用'strchr' /'memcpy'來做點什麼。 – duskwuff
- 1. fgets的沖洗緩衝區
- 2. fgets()當緩衝區太大時阻塞
- 3. 當dest緩衝區小於src緩衝區時strcpy
- 4. Colorschemes當緩衝區
- 5. 與字符串緩衝區的.contains相當於什麼
- 6. Android原始表面緩衝區(相當於winapi32 SetDIBits)
- 7. 什麼是LIBCURL相當於--N/- 無緩衝區?
- 8. 消息緩衝區struct(mbuf):Linux相當於
- 9. 相當於PHP的fgets()的C++?
- 10. 在C中的fgets()後清空輸入緩衝區
- 11. 緩衝區位於何處?
- 12. ios相機上的720P與1080P相機緩衝區
- 13. fgets()總是以\ 0結束char緩衝區嗎?
- 14. 分配給緩衝區時在fgets中泄漏
- 15. fgets溢出後如何清除輸入緩衝區?
- 16. 緩衝區溢出緩衝區長度
- 17. 幀緩衝區/顏色緩衝區?
- 18. 重命名當前緩衝區和Emacs中的相關文件
- 19. 用於DMA的快速緩衝存儲器緩衝區
- 20. 當前緩衝區的顯示號碼
- 21. Vim檢測當前緩衝區是什麼類型的緩衝區
- 22. 關於模型的頂點緩衝區和索引緩衝區的困惑
- 23. 對於字符緩衝區Java的大小適當的尺寸
- 24. 用於多個異步發送的相同緩衝區
- 25. 區分Vim中的隱藏緩衝區和活動緩衝區
- 26. 獲取直接字節緩衝區的位置相對於原始字節緩衝區
- 27. 用於VB6的協議緩衝區?
- 28. 關於流緩衝區的困惑
- 29. 關於python中的緩衝區接口
- 30. 關於緩衝區溢出的練習
如果你使用的是C++,看看[istringstream](http://www.cplusplus.com/reference/iostream/istringstream/),它可以讓你'從內存中的字符串中讀取'。 –
你已經標記了'c'和'C++'......這是什麼?你的緩衝區是如何定義的? –
決定是否要編寫C代碼或C++代碼。然後回來問問怎麼做。我不會浪費時間爲您編寫C++解決方案,因爲您可能會將它解讀爲「不夠C」。 – sbi