我有一个<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=10
,b= "5jj8j"><10>
和c
到初始化的任何变量。
如何使用sscanf
读取<>
对吧?
感谢您的回答。
答案 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
}