2015-09-20 219 views
1

我想从一个字符串中“提取”信息。该字符串始终格式为int int char使用std :: sscanf和std :: string的C++

我花了很长时间在这个上,检查了“每个”这个网站和谷歌我发现的例子,没有用。编译了一些例子,但崩溃了(没有溢出)。

这里是目前,它编译但崩溃。

// Data      
string str = "53 25 S"; 
int num1; 
int num2; 
char type3; 

// Read values         
sscanf(str.c_str(),"%i %i %c",num1,num2,type3); 
+0

(在标准头<sstream>声明)是'的std :: istringstream'考虑会更好? –

+0

是的。并有strtok()的考虑,但为此,我想尽可能简单。 –

回答

5

任何基本的文本和sscanf()文档的简单的阅读,你可以回答自己的问题。

如果您确实坚持使用sscanf(),则需要传递num1,num2num3的地址,而不是其值。

sscanf(str.c_str(),"%i %i %c",&num1,&num2,&type3); 

你会使用stringstream比试图使用过时的功能,从C

std::istringstream some_stream(str); 
some_stream >> num1 >> num2 >> type3; 
+0

我看了以前的文档,但现在看,我完全忽略了这个地址。 –

+0

我认为这里第一句话中的sn is不必要。对于很多人,包括我自己,StackOverflow在文档之前在搜索结果中显示。 – bejado

+0

这种暴躁是有保证的。 OP声称努力寻找答案。在大多数介绍性文本中存在相关信息,对SO和其他网站的类似问题提供了许多答案,'sscanf()'的文档以及大多数关于使用这些功能的教程都与该声明相矛盾。 – Peter

2

您需要运营商的地址,即

sscanf(str.c_str(),"%i %i %c",&num1,&num2,&type3); 
+0

啊哇,谢谢,现在工作正常,令人惊讶的是,我从来没有发现任何类似的搜索。 –

相关问题