2015-04-04 44 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類