C语言中的%64[^是什么意思?

7
sscanf(line, "%d %64[^\n", &seconds, message);

%64[^是什么意思 - 最多64个字符?它能在GNU C编译器中使用吗?


3
我可能错了,但是你漏掉了一个's',应该是%64[^\n]s。 - Krishnabhadra
1个回答

10

它意味着“最多读取64个字符或在遇到换行符时停止,以先到者为准”。这是由标准规定的,因此所有标准库都必须支持它。

C11 7.21.6.2

[匹配来自一组期望字符(扫描集)中的一个非空字符序列。[...] 转换说明符包括格式字符串中的所有后续字符,直到(含)匹配右方括号(])。

方括号之间的字符(扫描列表)构成扫描集,除非左方括号后的字符是脱字符(^),此时扫描集包括脱字符和右方括号之间未出现在扫描列表中的所有字符

如评论所述,可能需要匹配一个右方括号来界定扫描列表。不需要使用s说明符。


哇,我不知道。需要了解一下那些东西。虽然我会说,“所有的C库都必须支持它”。 - Prof. Falken
@AmigableClarkKant 对措辞的选择做得好。 - cnicutar
@AmigableClarkKant 标准并未说明它可以被省略,但我认为一些实现可以不需要匹配的]符号。 - cnicutar
还有一个“s”……不仅仅是结尾] - Prof. Falken
1
@AmigableClarkKant 不需要s。在这种情况下,[就是s - cnicutar
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接