簡單的問題,有可能引起棘手的答案刪除換行符這裏:我在尋找一個便攜式和本地化友好的方式來取消C尾隨換行,最好是一些基於標準的。下,在便攜式和國際友好的方式
我已經知道了以下解決方案:
解析爲
\r
和\n
某種組合。在處理Windows,* nix和Mac時,真的不是很漂亮,所有這些都使用不同的序列來表示一條新線。另外,其他語言甚至使用相同的轉義序列換行?我期望這會在使用英文不同字形的語言(比如說日文等)中爆炸。刪除尾部
n
字節並替換最終的\0
。看起來像更脆弱的方式來做到上述。isspace
看起來很誘人,但我只需要匹配換行符。其他空格被認爲是有效的標記文本。C++有一個類來做到這一點,但它是在純-C世界一點幫助我。
locale.h
看起來像我之後,但我看不出有關提取換行符的任何內容。
因此,這是一個例子,我將不得不「滾動我自己」的功能,或者是有什麼,我已經錯過了?謝謝!
解決方案
我結束了兩個答案來自Weather Vane
和Loic
,分別結合我的最終解決方案。有效的方法是使用方便的strcspn
函數打開從Loic提供的鏈接中選擇的第一個換行符。因此,我可以根據許多支持的語言環境來選擇分隔符。在這個層面上,有太多不足以支持這一點的人很好。我甚至不知道有幾種競爭性的西里爾文編碼。
這樣,我可以同時仍使用標準庫函數實現「足夠好」的跨國公司的支持。
因爲我只能接受一個答案,我選擇風向標的他是最後我用調用。這就是說,這真的是兩個答案一起工作對我來說。
Spiffy,不知道'strcspn'。它如何處理國外的語言環境? – phobos51594
'strcspn'的MS文檔中提到了語言環境,也許你可以按照它進行操作。 https://msdn.microsoft.com/en-us/library/xe8sk0x7.aspx –
啊,看着Posix版本,它不包含locale參數(至少string.h中沒有) 。 – phobos51594