我想扫描线,如逸出sscanf的方括号]
"[25, 28] => 34"
我写了一个小程序来测试一下:
#include <cstdlib>
#include <iostream>
int main() {
char* line = "[25, 28] => 34";
char a1[100], a2[100];
int i;
sscanf(line, "[%[^,], %[^\]] => %i", a1, a2, &i);
std::cout << "a1 = " << a1 <<"\na2 = " << a2 << "\ni = "<<i <<"\n";
return 0;
}
编译这给
warning: unknown escape sequence '\]'
和输出
a1 = 25
a2 = 28
i = -1073746244
如果我将其更改为
sscanf(line, "[%[^,], %[^]] => %i", a1, a2, &i);
我没有得到任何编译器的投诉,但仍然
a1 = 25
a2 = 28
i = -1073746244
我知道这个问题是在第二个令牌,因为
sscanf(line, "[%[^,], %[]] => %i", a1, a2, &i);
给
a1 = 25
a2 = 28
i = 34
但我想为第二个标记使用终止条件。我怎么做?
-1将不起作用 - '%s'将所有内容匹配到下一个空格,所以它会吸收下面的标点符号(','或']'),随后的匹配将失败。 – 2011-04-21 23:05:14
天哪,我有点落伍了...... 8)很好地投了票。 – ColWhi 2011-04-21 23:07:39