%255 [^\0] s和%255c之间的差异

CHR*_*RIS 1 c format scanf

在C中,当使用sscanf时,对于format参数,使用时有区别:

%255[^\0]s
Run Code Online (Sandbox Code Playgroud)

和:

%255c
Run Code Online (Sandbox Code Playgroud)

一个更快吗?以上其中一种会产生不同的结果吗?

chu*_*ica 6

问题当然不是 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"

  1. "%255c" 消耗前导空格. "%255s"确实消耗无限的前导空格,扫描它们,但保存它们dest.
  2. "%255c"扫描空白并保存它们dest. "%255s",在发现非白色空间后,如果遇到空白区域,将停止扫描.
  3. 两者最多可扫描255个字符并将扫描的字符放入dest.
  4. "%255c"没有追加\0所以dest应该用255对付char.
  5. "%255s",如果它扫描至少1个字符,将附加一个\0,所以dest应该应付256 char.
  6. \0当扫描buf停止时\0,扫描a都不会sscanf(). "%255c"将扫描\0fscanf().这是不寻常的,因为fscanf()文件中包含的内容并不常用\0.

如果出现任何速度差异,当然它是依赖于实现的.