一个奇怪的字符出现在我的char数组的第一个

时间:2016-06-09 13:49:09

标签: c++ arrays string

我正在制作摩尔斯电码转换器,已经完成,我解决了问题,但我不明白。 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 个答案:

答案 0 :(得分: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;

答案 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;