-1

我试图了解如何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);
 }
4

2 回答 2

1

你应该写:sscanf("4711bar", "%d%s", &a, b); make&一个指向并且需要指针的指针&aasscanf

第二个示例有效,因为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);
于 2013-11-09T20:11:11.207 回答
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;
于 2013-11-09T20:13:06.847 回答