2015-11-22 94 views
1

我有一个文件<int><string><int>,我将它保存到一个缓冲区,然后使用管道读取它。该字符串是字母数字。C - 如何阅读sscanf <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

另一个建议是当你已经打开一个文件时,使用'sscanf'的'fscanf' instad。你可能想'fdopen'它来检索'FILE'指针并使用'fscanf'来读取。或者先使用'getline'来读取整行,然后调用'sscanf'。 –

回答

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 
}