我解析一行以從一組parens中提取字符串,但在有多個嵌套parens的情況下我打印procName時沒有得到任何東西。得到正確的格式從sscanf()在c
例如109765((測試))等等等等
sscanf(line,"%*d (%[^'('')']", procName);
這種格式應該找到一個左括號,然後返回一個字符串,而忽略任何數量的左,右括號的,但它並沒有在這種特殊情況下工作。但是,如果只有一套parens,它可以完美地工作。
任何想法,我可能會在這裏失蹤?提前致謝!
我解析一行以從一組parens中提取字符串,但在有多個嵌套parens的情況下我打印procName時沒有得到任何東西。得到正確的格式從sscanf()在c
例如109765((測試))等等等等
sscanf(line,"%*d (%[^'('')']", procName);
這種格式應該找到一個左括號,然後返回一個字符串,而忽略任何數量的左,右括號的,但它並沒有在這種特殊情況下工作。但是,如果只有一套parens,它可以完美地工作。
任何想法,我可能會在這裏失蹤?提前致謝!
OP的"("
比賽正好1 '('
。
使用"%*[(]"
掃描一個或多個'('
。
更好地限制字符串輸入。
打破格式輸入件更容易看到。
檢查返回值。
char procName[100];
int cnt = sscanf(line,"%*d" " %*[(]" "%99[^()']", procName);
if (cnt == 1) OK();
完美的作品。謝謝! – fatalError
而不是回答有關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
這個scanf調用看起來相當混亂。你爲什麼認爲那裏的否定字符有*忽略*括號?那些單引號是什麼意思? – user2357112