2015-04-04 73 views
0

我试图采取字符串作为输入的阵列,但其赋予运行时间错误错误而采取的字符串数组作为输入

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

过程与状态-1073741510(0分钟(S终止),10秒)

正常工作与cin但如果我使用scanf

给错误10

有人能告诉我为什么其作出上述错误

是什么错误意味着 ,为什么不提示错误,而使用cin

我正在使用代码块13.12

+0

[相同的理由, 'printf'](http://stackoverflow.com/questions/10865957/c-printf-with-stdstring/10865967#10865967) – chris 2015-04-04 17:40:16

+0

和最新的原因? – Rajnish 2015-04-04 17:41:32

+1

'scanf'是一个C函数,并不知道C++类和对象,例如'std :: string'。 – 2015-04-04 17:41:56

回答

0

scanf()是为了与C风格的字符串(又名char *char[])一起使用,它应该是

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

没有理由在std::string使用此。

0

string是一个C++类型,您应该使用C++ I/O,因此cincout。如果您确实想要使用C I/O,则可以访问c_str方法,以获得位于string之后的C char *

+0

不是'c_str()',因为它给出了一个'const char *'。你需要调整它的大小,使它足够大以保持字符串,而不用在最后修改空字符,然后使用类似'&str [i] [0]'的东西。这也只能保证在C++ 11中工作。 – chris 2015-04-04 17:45:35

0

您正在使用C++趁CIN 头文件避免使用非空指针和字符数组的

CIN >>具有运算符重载和用户的现代string类

相关问题