2012-12-21 48 views
1

我正在尝试学习scanf格式字符串,并且遇到问题需要解决此问题。我试图格式的字符串为:scanf格式字符串

“someKey” =“someValue中”

这是我使用的代码:

void test() 
{ 
    char buffer[2][128]; 
    int amountRead; 
    char* input = "\"test\"=\"hello\""; 
    int result = sscanf(input, "\"%128[a-zA-Z0-9]s\"=\"%128[a-zA-Z0-9]s\"%n", buffer[0], buffer[1], &amountRead); 
    printf("input = %s\nresult = %d\nstr1 = %s\nstr2 = %s\namountread = %d\n", input, result, buffer[0], buffer[1], amountRead); 
} 

出于某种原因,它仅管理扫描第一个值:

input = "test"="hello" 
result = 1 
str1 = test 
str2 = 
amountread = 0 

回答

8

用你的代码玩了一下,然后去了manpage。

s匹配一系列非空白字符;

...

[与从指定接受字符集中的字符的一个非空序列;

显然使用[当你不需要s,所以下面确实如预期工作:

int result = sscanf(input, "\"%128[a-zA-Z0-9]\"=\"%128[a-zA-Z0-9]\"%n", buffer[0], buffer[1], &amountRead); 
+0

非常奇怪,它仍然把“测试”到第一个字符串参数。 – charliehorse55

+0

它匹配“测试”,然后无法匹配's'并停止扫描。 – aragaer

+1

@ charliehorse55添加到此答案:您可以使用'[^ ​​\“]'而不是'[a-zA-Z0-9]' – MOHAMED