Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将字符串数组作为输入时出错_C++_Arrays_String_Scanf - Fatal编程技术网

C++ 将字符串数组作为输入时出错

C++ 将字符串数组作为输入时出错,c++,arrays,string,scanf,C++,Arrays,String,Scanf,我试图将字符串数组作为输入,但它给出了运行时错误 #include<iostream> #include<cstdio> #include<string> using namespace std; int main() { string str[500]; int n; cin>>n; for(int i=0;i<n;i++)

我试图将字符串数组作为输入,但它给出了运行时错误

    #include<iostream>
    #include<cstdio>
    #include<string>
    using namespace std;

    int main()
    {
        string str[500];
        int n;
        cin>>n;
        for(int i=0;i<n;i++)
            scanf("%s",&str[i]); \\works fine with cin but gives error using scanf
        return 0;
    }
#包括
#包括
#包括
使用名称空间std;
int main()
{
字符串str[500];
int n;
cin>>n;

对于(int i=0;i> p>代码>字符串是C++类型,您应该使用C++ I/OS,因此代码< CIN < /代码>和<代码> CUT/CODE >。如果您真的想使用C/IOS,可以访问<代码> CySTR 方法,以获得<<代码> char */COD>后面的<>代码>字符串>代码> .< /P> <代码>代码> SCANFER()/Case>是用于C风格字符串的。(又名
char*
char[]
),应该是

char myString[101];
char* myOtherString = (char*)malloc(101);
scanf("%100s", myString);
scanf("%100s", myOtherString);
free(myOtherString);

没有理由使用过<代码> STD::String ./P>> P>你使用C++来利用CIN 头文件避免使用非空指针和字符数组


CIN >操作符超载,用户使用现代字符串类

,原因是什么?<代码> SCANF是C函数,不知道C++类和对象,例如,<代码> STD::String < /C> > @ @ RJJANGE],> [代码> SCANF< /代码>对于std::string没有选项,只有一个C样式的字符串。使用其他东西代替它所期望的肯定不会给你想要的结果。这实际上是未定义的行为,所以任何事情都可能发生。@chris你能再详细解释一下吗,我知道这与C样式字符串的未定义类似,但这到底是如何工作的,我告诉我也就是说,我已经包含了cstdio库,这样编译器就可以从那里获得它的引用,所以我有点困惑它在后台是如何工作的,比如y它的未定义?不是
c_str()
因为这会产生一个
常量char*
。您需要调整它的大小,使它足够大,可以容纳字符串而不修改末尾的空字符,然后使用类似
&str[i][0]
的东西。这也只能保证在C++11中工作。