我试图了解 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);
}
最佳答案
您应该编写:sscanf("4711bar", "%d%s", &a, b);
&
使 &a
是指向 a
的指针,而 sscanf
需要指针。
第二个示例有效,因为 a
是一个数组。并且 char[100]
类型的数组 a
隐式转换为指向数组第一个元素的 char *
类型的指针(a [0]
)。所以 a
与 &(a[0])
int a;
char b[100];
sscanf("4711bar", "%d%s", &a, b);
-
char a[100];
sscanf("foo", "%s", a);
关于c - 方法 sscanf() 不明确行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19882482/