繁体   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