C - 如何用sscanf <int> <string> <int>读取?

时间:2015-11-22 12:50:38

标签: c linux string gcc scanf

我有一个<int><string><int>的文件,然后将其保存到缓冲区中,然后使用管道将其读取。该字符串是字母数字。

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);

问题是当我读取字符串时它“吃掉”><%d>并且它将所有内容解释为字符串。例如,如果我有<10><5jj8j><10>个变量将是a=10b= "5jj8j"><10>c到初始化的任何变量。

如何使用sscanf读取<>对吧?

之间的字符串

感谢您的回答。

1 个答案:

答案 0 :(得分:1)

由于"%s"会保存所有非空格字符而OP不希望将'>'保存为字符串的一部分,因此请使用"%[]"

使用"%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
}