2016-05-27 45 views
0

我解析一行以從一組parens中提取字符串,但在有多個嵌套parens的情況下我打印procName時沒有得到任何東西。得到正確的格式從sscanf()在c

例如109765((測試))等等等等

sscanf(line,"%*d (%[^'('')']", procName); 

這種格式應該找到一個左括號,然後返回一個字符串,而忽略任何數量的左,右括號的,但它並沒有在這種特殊情況下工作。但是,如果只有一套parens,它可以完美地工作。

任何想法,我可能會在這裏失蹤?提前致謝!

+0

這個scanf調用看起來相當混亂。你爲什麼認爲那裏的否定字符有*忽略*括號?那些單引號是什麼意思? – user2357112

回答

2

OP的"("比賽正好1 '('
使用"%*[(]"掃描一個或多個'('

更好地限制字符串輸入。
打破格式輸入件更容易看到。
檢查返回值。

char procName[100]; 
int cnt = sscanf(line,"%*d" " %*[(]" "%99[^()']", procName); 
if (cnt == 1) OK(); 
+0

完美的作品。謝謝! – fatalError

2

而不是回答有關sscanf的問題,我已經解決了這個問題,無論有多少支架,它都能正常工作。

#include <stdio.h> 
#include <string.h> 

int main(void) { 
    char input[1024]; 
    char funcname[33]; 
    char *start, *finis; 
    size_t len; 
    if(fgets(input, sizeof input, stdin) == NULL) 
     return 1; 

    if ((start = strrchr(input, '(')) == NULL) // find last '(' 
     return 1; 
    start++;          // move past the bracket 
    if ((finis = strchr(start, ')')) == NULL)  // find next ')' 
     return 1; 

    if ((len = finis - start) >= sizeof funcname) 
     return 1; 

    memcpy(funcname, start, len); 
    funcname [len] = '\0'; 

    printf("%s\n", funcname); 
    return 0; 
} 

程序會話:

109765 ((test)) blah blah 
test