如何打印一个字符指针而不得到乱码

how to print a char pointer with out getting gibberish?

本文关键字:指针 一个 何打印 打印 字符      更新时间:2023-10-16

所以我试图计算一个字符串,我在一个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

您忘记在字符数组末尾插入空终止符:

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;

问题是,直到没有找到空终止符,字符数组才被认为完成。所以它没有停止,而是打印超出实际数组的内容。您必须使用空结束符来标记数组的结束。

您复制的字符串不包含结束零。这是一个对象,例如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() );