C++ 应用于字符串的std::cin和scanf()之间的差异
我试图获取写入char类型变量的字符串的第一个字符。使用std::cin(注释掉)它可以正常工作,但是使用scanf()我会得到运行时错误。当我进入“lluur”时,它会被压碎。为什么会这样?使用MinGWC++ 应用于字符串的std::cin和scanf()之间的差异,c++,string,scanf,cin,C++,String,Scanf,Cin,我试图获取写入char类型变量的字符串的第一个字符。使用std::cin(注释掉)它可以正常工作,但是使用scanf()我会得到运行时错误。当我进入“lluur”时,它会被压碎。为什么会这样?使用MinGW #include <cstdio> #include <string> #include <iostream> int main() { std::string s; scanf("%s", &s); //std::cin
#include <cstdio>
#include <string>
#include <iostream>
int main() {
std::string s;
scanf("%s", &s);
//std::cin >> s;
char c = s[0];
}
#包括
#包括
#包括
int main(){
std::字符串s;
scanf(“%s”、&s);
//标准:cin>>s;
字符c=s[0];
}
scanf
对std::string
一无所知。如果要读入基础字符数组,必须写入scanf(“%s”,s.data())代码>。但一定要确保字符串的底层缓冲区足够大,方法是使用std::string::resize(number)
一般情况下:不要将scanf
与std::string
一起使用
如果要使用scanf
和std::string
int main()
{
char myText[64];
scanf("%s", myText);
std::string newString(myText);
std::cout << newString << '\n';
return 0;
}
因为std::string
不是char*
(当您使用%s
时,scanf
需要它)使用有效的代码有什么问题吗?:-)
int main()
{
std::string newString;
newString.resize(100); // Or whatever size
scanf("%s", newString.data());
std::cout << newString << '\n';
return 0;
}
std::string s;
std::getline(std::cin, s);