我想了解sscanf()
的工作原理。我在此页面中运行了一些示例:http://docs.roxen.com/pike/7.0/tutorial/strings/sscanf.xml并且它们无法在我的平台上运行。我不明白为什么。
例如:“sscanf(”4711bar“,”%d%s“,a,b);”使程序退出并出现错误...
以下是其中一个有效的例子:“sscanf(”foo“,”f%s“,a);”。 有人知道为什么吗?他们在您的平台上工作吗?谢谢。
这是我的代码:
int main(void){
char *b = (char*)malloc(sizeof(char)*100);
int a = 0;
sscanf("4711bar", "%d%s", a, b);
printf("%d", a);
printf("%s", b);
}
答案 0 :(得分:1)
你应该写:sscanf("4711bar", "%d%s", &a, b);
&
使&a
指针指向a
,sscanf
需要指针。
第二个示例有效,因为a
是一个数组。类型a
的数组char[100]
被隐式转换为指向数组的第一个元素(char *
)的类型a[0]
的指针。因此a
与&(a[0])
int a;
char b[100];
sscanf("4711bar", "%d%s", &a, b);
-
char a[100];
sscanf("foo", "%s", a);
答案 1 :(得分:0)
您应该将有效指针传递给sscanf
,将&a
传递给整数,将b
传递给字符串:
sscanf("4711bar", "%d%s", &a, b);
^
此外,您的代码是C-ish而不是C ++。使用C ++应该看起来像:
std::stringstream s;
s << "4711bar";
int a;
std::string b;
s >> a >> b;