方法sscanf()模糊行为

时间:2013-11-09 20:07:21

标签: c

我想了解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);
 }

2 个答案:

答案 0 :(得分:1)

你应该写:sscanf("4711bar", "%d%s", &a, b); &使&a 指针指向asscanf需要指针。

第二个示例有效,因为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;