所以我正在尝试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
答案 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() );