C++ 应用于字符串的std::cin和scanf()之间的差异

C++ 应用于字符串的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

我试图获取写入char类型变量的字符串的第一个字符。使用std::cin(注释掉)它可以正常工作,但是使用scanf()我会得到运行时错误。当我进入“lluur”时,它会被压碎。为什么会这样?使用MinGW

#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);