021023 – sscanf 无法读取零长度字符串


下面的代码:

C
#include <stdio.h>

int main(void) {
  char buf[80] = "salam";
  const char *fmt = "\"%79[^\"]\"";
  int n;

  n = sscanf("\"\"", fmt, buf);
  printf("%d fields were read. buf = '%s'\n", n, buf);
  n = sscanf("\"hamidi\"", fmt, buf);
  printf("%d fields were read. buf = '%s'\n", n, buf);
}

输出:

已读取 0 个字段。 buf=“萨拉姆”
已读取 1 个字段。 buf=“哈米迪”

这表明 sscanf 函数无法读取具有指定格式字符串的空字符串。 是否有一个很好的替代正则表达式格式字符串来通过 sscanf 函数读取长度为零到最多 79 个字符的字符串? 换句话说,我希望第一个 sscanf 将 ‘\0’ 插入到 buf[0] 并返回 1 而不是 0。有办法吗?

我尝试过的:

这只是一个问题。 这不是我必须尝试的事情。

解决方案1

更好的选择是使用 弗格茨[^]。 它包括读取的换行符,但可以使用如下函数轻松删除换行符:

C
void StripChar( char * buffer, int chr )
{
    char * p = strchr( buffer, chr );
    if( p )
       * p = 0;
}

这是一个小样本:

C
#define BUFFER_SIZE 79
    char buffer[ BUFFER_SIZE + 1 ] = { 0 };
    fgets( buffer, BUFFER_SIZE, stdin );
    StripChar( buffer, '\n' );

コメント

タイトルとURLをコピーしました