如何打印一个字符指针而不是乱搞?

时间:2014-06-02 03:26:56

标签: c++ string pointers char cout

所以我正在尝试cout我在char指针中初始化的字符串。问题是,当我开玩笑时,它会打印整个字符串以及一些我不想看到的字符。你怎么解决这个问题?

string text = "A+B";
char *expression;
expression = new char[text.length()];

for(int x=0;x<text.length();x++)
  expression[x] = text[x];

cout << expression << endl;

It displays this:
   A+B²²²²▌▼∟§s

2 个答案:

答案 0 :(得分:5)

您忘记在字符数组的末尾插入 null终结符

string text = "A+B";
char *expression;
expression = new char[text.length()+1]; //allocate one character more
int x;
for( x=0;x<text.length();x++)
 expression[x] = text[x];
expression[x]=0;  //insert the null terminator
cout << expression << endl;

问题是,在找不到 null终结符之前,不会认为字符数组已完成。因此它没有停止并且正在打印超出实际阵列。您必须将 null终止符放在标记数组的末尾。

答案 1 :(得分:2)

您复制的字符串不包含终止零。这是一个对象,例如类型为std :: string的s包含不包含终止零的s.length()字符。 有效代码可能看起来像

string text = "A+B";
char *expression;
expression = new char[text.length() + 1]; // one more character for the terminating zero
std::strcpy( expression, text.c_str() );