2013-11-23 59 views
17

正如标题所说,我很好奇,如果有一种方法来读取C++字符串与scanf。阅读C++字符串与scanf

我知道我可以阅读每个字符和应有的字符串插入它,但我想要的东西,如:

string a; 
scanf("%SOMETHING", &a); 

gets()也不起作用。

在此先感谢!

+7

只是好奇,为什么你不能使用cin或getline? –

+0

在一些使用流的编译器上需要花费很多时间......并且我正在为这样的编译器编写代码.. –

+1

@Vlad:你应该用'std :: ios_base :: syc_with_stdio(false);'如果从标准输入读取太慢。 –

回答

13

没有的形势下,其gets()要使用!它是总是错误地使用gets()并将其从C11中删除并从C++ 14中删除。

scanf() doens't支持任何C++类。但是,您可以将结果从scanf()存储到std::string

std::string str(100, ' '); 
if (1 == scanf("%*s", &str[0], str.size())) { 
    // ... 
} 

我不能完全肯定要指定scanf()并在该缓冲区lenght的方式排序的参数去(有一个机会,参数&str[0]str.size()需要反转,并且我可能在格式字符串中缺少.)。请注意,生成的std::string将包含一个终止空字符,它不会改变其大小。

当然,我只是使用if (std::cin >> str) { ... }但这是一个不同的问题。

+0

你确定你的代码正在编译?我使用C++ 98和C++编译错误11 –

+0

@Vlad:当然,我认为代码应该编译,假设你包含''和'',并且位于函数内。你得到什么错误信息? –

+0

@Vlad:好的,我看到:看起来'std :: string'没有声明一个构造函数只占用大小。使用'std :: string str(100,'');'修复了这个问题。 –

20

这可以工作

char tmp[101]; 
scanf("%100s", tmp); 
string a= tmp; 
+3

我不知道我可以使用char []初始化C++字符串..非常感谢! :) –

-3
string temp; 
scanf("%s",&temp.c_str()); 

我希望它能工作!

+1

这不是一个好主意。'scanf'会期望char的非const指针。 – dreamlax