2015-11-22 140 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 
}