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中工作。