簡體   English   中英

在C中以'\\ n'作為分隔符的strsep()

[英]strsep() with '\n' as a delimiter in C

所以我目前正在使用strsep()來分隔我的字符串,其中給定的字符串是

char str[] = "line 01\n"
                 "line 02\n"
                 "line 03\n"
                 "line 04\n"
                 "line 05\n"
                 "line 06\n"
                 "line 07\n"
                 "line 08\n"
                 "line 09\n"
                 "line 10\n";

我正在使用strsep(&str, "\\n")分隔它們。 因此,我擔心的是我實際上使用的是兩個定界符“ \\”和“ n”對嗎? 然后,如何將分隔符設為“ \\ n”。 因為提取“第10行”后,strsep會將“ \\”替換為“ \\ 0”。 但是str []本身以“ \\ 0”終止,並且我的定界符之一是“ \\”,因此它實際上會將“ \\ 0”中的“ \\”視為另一個字符串,因此我會提取出不必要的空字符串。

在字符串和字符文字中,對轉義序列進行處理,以便(例如) \\n\\0成為單個字符“換行符”和“字符串終止符”-它們似乎並不是您所認為的每個字符。

此重要細節在階段5的C11 5.1.1.2 Translation Phases中:

每個源字符集成員以及字符常量和字符串文字中的轉義序列都將轉換為執行字符集的相應成員; 如果沒有相應的成員,則將其轉換為實現定義的成員,而不是空(寬)字符。

同樣在5.2.1 Character sets /2

在字符常量或字符串文字中,執行字符集的成員應由源字符集的相應成員或由反斜杠\\后跟一個或多個字符組成的轉義序列表示。

您可以使用的實際轉義序列已在標准中的多個位置進行了詳細說明,由於答案可能已經足夠大,因此在這里我不會全部顯示。


但是,基於對問題的仔細閱讀,我懷疑您的實際問題是誤解了為什么使用換行符分隔字符串會導致“第10行”之后的字符串為空。

如果考慮以下字符串,則很容易理解:

A|B|C

如果根據|分開 ,最后得到三個值ABC 如果對字符串A|B|做相同的事情 ,最后得到AB和空字符串。

這幾乎可以肯定是字符串發生的情況。 因為最后幾個字符是line 10\\n並且您使用\\n作為分隔符,所以最后一個\\n后面實際上還有一個額外的空字符串。

我懷疑如果您取消最后的換行符,您的問題將消失。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM