【问题标题】:C - How to read with sscanf <int><string><int>?C - 如何使用 sscanf <int><string><int> 阅读?
【发布时间】:2016-02-24 14:38:44
【问题描述】:

我有一个带有&lt;int&gt;&lt;string&gt;&lt;int&gt; 的文件,我将它保存到缓冲区中,然后使用管道读取它。该字符串是字母数字的。

FILE *est = fopen ("file.txt","r");
fgets( buffer1, 256, est);
write(fd[i][1], buffer1, BUFFERSIZE);

.
.
.

int r = read(fd[i][0], buffer1, BUFFERSIZE);
sscanf(buffer1,"<%d><%s><%d>", &a, b, &c);

问题是当我读取它“吃”&gt;&lt;%d&gt; 的字符串时,它会将所有内容解释为字符串。例如,如果我有 &lt;10&gt;&lt;5jj8j&gt;&lt;10&gt;,那么变量将是 a=10b= "5jj8j"&gt;&lt;10&gt;c,无论它被初始化。

如何使用sscanf 读取&lt;&gt; 之间的字符串对吗?

感谢您的回答。

【问题讨论】:

  • 另一个建议是使用fscanf instad of sscanf,因为您已经打开了一个文件。您可能想fdopen 它来检索FILE 指针并使用fscanf 来读取。或者先使用getline 阅读整行,然后调用sscanf

标签: c linux string gcc scanf


【解决方案1】:

由于"%s" 保存所有非空白字符并且OP 不希望将'&gt;' 保存为字符串的一部分,因此请使用"%[]"

使用"%n" 来检测扫描是否以n 完成,在最后,只有当所有格式匹配时才会改变。

// sscanf(buffer1,"<%d><%s><%d>", &a, b, &c);
int n = 0;
char b[100];
sscanf(buffer1,"<%d><%99[^>]><%d>%n", &a, b, &c, &n);
if (n > 0) {
  ; // Scan completed - success;
} else {
  ; // Scan failed
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 2015-11-11
    相关资源
    最近更新 更多