2016-06-09 26 views
2

我正在製作莫爾斯碼轉換器,它完成了,我解決了這個問題,但我不明白它。 picture represents the problem一個奇怪的字符出現在我的字符數組中的第一個字符

這是一些代碼:

string txt,result; 
int x; 
cout << "Enter the text you want to convert\n"; 
getline (cin,txt); 
x = txt.size(); 
char text[x]; 
strcat(text,txt.c_str()); 

cout<<"txt = "<<txt<<"\n"<<"text = "<<text<<endl; 

我只是想知道那是什麼char,爲什麼它會出現。

+2

發佈可以發佈爲圖片的內容不好。 – MikeCAT

+0

壞字符是隨機的,後面跟純運氣的'\ 0'。使用'strcpy',而不是'strcat'。 'x'應該是'txt.size()+ 1'(對於結尾''\ 0'') – manuell

回答

7
  • 您沒有初始化text,所以它有一個不確定的值。在典型情況下,這些奇怪的角色來自你記憶中的某個地方。在使用前初始化它。我認爲使用strcpy()而不是strcat()在這種情況下更好。標準C++不支持變長數組。我建議你應該使用new[]
  • 不要忘記分配空間來終止空字符。

試試這個:

string txt, result; 
int x; 
cout << "Enter the text you want to convert\n"; 
getline(cin, txt); 
x = txt.size() + 1; // +1 for terminating null character 
char *text = new char[x]; 
strcpy(text, txt.c_str()); 

cout << "txt = " << txt << "\n" << "text = " << text << endl; 

// do some other work with text 

// after finished using text 
delete[] text; 
3

strcat通過搜索目標字符串的結尾(通過尋找空終止),然後寫其他字符有追加到一個字符數組。

但是,你有一個未初始化的內存數組,所以字符串將被連接的實際位置是不確定的。你可以說:

text[0] = 0; 
strcat(text, txt.c_str()); 

或者只是:

strcpy(text, txt.c_str()); 

此外,您不能使用非const變量初始化數組,所以你應該或者使用新的分配內存:

text = new char[x]; 

或只使用一個std::string和你去修改它:

std::string text = txt; 
相關問題