gpt4 book ai didi

c - %255[^\0]s 和 %255c 之间的区别

转载 作者:太空宇宙 更新时间:2023-11-04 00:38:44 25 4
gpt4 key购买 nike

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

%255[^\0]s

和:

%255c

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

最佳答案

问题当然不是 OP 的意图。

OP 请求 sscanf(buf, format, dest) 格式之间的差异

"%255[^\0]s"  // a seemingly format specifier %255[^\0] and the letter 's'
"%255c"

当然,OP 想要 sscanf(buf, format, dest) 格式之间的差异

"%255[^\0]"  // a seemingly format specifier %255[^\0]
"%255c"

"%255s"  // format specifier %255s
"%255c"

"%255[^\0]" 不是人们可能认为的格式。这与格式"%255[^"相同sscanf() 不知道在明确的空字符 '\0' 之后还有什么东西。由于格式说明符以 [ 开头但不以匹配的 ] 结尾,因此它是无效的说明符。 “如果转换规范无效,则行为未定义。”

这也适用于原始"%255[^\0]s":行为未定义

以下是 "%255s""%255c" 之间的突出问题

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

如果出现任何速度差异,当然这取决于实现。

关于c - %255[^\0]s 和 %255c 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18024820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com