我有一个 <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
读取 <>
之间的字符串对吧?
感谢您的回答。
最佳答案
由于 "%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
}
关于C - 如何使用 sscanf <int><string><int> 进行读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33854964/