我正在制作摩尔斯电码转换器,已经完成,我解决了问题,但我不明白。 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
是什么,以及它出现的原因。
答案 0 :(得分:7)
text
,因此它具有不确定的值。在典型的情况下,奇怪的角色来自你记忆的某个地方。在使用之前初始化它。我认为在这种情况下使用strcpy()
代替strcat()
会更好。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;
答案 1 :(得分:3)
strcat
通过搜索目标字符串的结尾(通过查找空终止符)然后在那里写入其他字符来附加到char数组。
但是,你有一个未初始化的内存数组,所以字符串连接的实际位置是不确定的。你可以说:
text[0] = 0;
strcat(text, txt.c_str());
或只是:
strcpy(text, txt.c_str());
此外,您不能使用非const变量初始化数组,因此您应该使用new分配内存:
text = new char[x];
或只需使用std::string
并随时修改:
std::string text = txt;