在C中,当使用sscanf时,对于format参数,使用时有区别:
%255[^\0]s
Run Code Online (Sandbox Code Playgroud)
和:
%255c
Run Code Online (Sandbox Code Playgroud)
一个更快吗?以上其中一种会产生不同的结果吗?
问题当然不是 OP的意图.
OP请求sscanf(buf, format, dest)格式之间的差异
"%255[^\0]s" // a seemingly format specifier %255[^\0] and the letter 's'
"%255c"
Run Code Online (Sandbox Code Playgroud)
当然,OP希望sscanf(buf, format, dest)格式之间存在差异
"%255[^\0]" // a seemingly format specifier %255[^\0]
"%255c"
Run Code Online (Sandbox Code Playgroud)
要么
"%255s" // format specifier %255s
"%255c"
Run Code Online (Sandbox Code Playgroud)
该"%255[^\0]"是没有一个可以想到的格式.这与格式相同"%255[^". sscanf()不知道有什么东西超过显式空字符'\0'.由于格式说明符以a开头[但不以匹配结束],因此它是无效的说明符."如果转换规范无效,则行为未定义."
这也适用于原始"%255[^\0]s":行为未定义.
以下是"%255s"和之间的突出问题"%255c"
"%255c" 不消耗前导空格. "%255s"确实消耗无限的前导空格,扫描它们,但不保存它们dest."%255c"扫描空白并保存它们dest. "%255s",在发现非白色空间后,如果遇到空白区域,将停止扫描.dest."%255c"并没有追加\0所以dest应该用255对付char."%255s",如果它扫描至少1个字符,将附加一个\0,所以dest应该应付256 char.\0当扫描buf停止时\0,扫描a都不会sscanf(). "%255c"将扫描\0在fscanf().这是不寻常的,因为fscanf()文件中包含的内容并不常用\0.如果出现任何速度差异,当然它是依赖于实现的.