正如标题所说,我很好奇,如果有一种方法来读取C++字符串与scanf。阅读C++字符串与scanf
我知道我可以阅读每个字符和应有的字符串插入它,但我想要的东西,如:
string a;
scanf("%SOMETHING", &a);
gets()
也不起作用。
在此先感谢!
正如标题所说,我很好奇,如果有一种方法来读取C++字符串与scanf。阅读C++字符串与scanf
我知道我可以阅读每个字符和应有的字符串插入它,但我想要的东西,如:
string a;
scanf("%SOMETHING", &a);
gets()
也不起作用。
在此先感谢!
没有的形势下,其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) { ... }
但这是一个不同的问题。
你确定你的代码正在编译?我使用C++ 98和C++编译错误11 –
@Vlad:当然,我认为代码应该编译,假设你包含'
@Vlad:好的,我看到:看起来'std :: string'没有声明一个构造函数只占用大小。使用'std :: string str(100,'');'修复了这个问题。 –
这可以工作
char tmp[101];
scanf("%100s", tmp);
string a= tmp;
我不知道我可以使用char []初始化C++字符串..非常感谢! :) –
只是好奇,为什么你不能使用cin或getline? –
在一些使用流的编译器上需要花费很多时间......并且我正在为这样的编译器编写代码.. –
@Vlad:你应该用'std :: ios_base :: syc_with_stdio(false);'如果从标准输入读取太慢。 –