如何打印一个字符指针而不得到乱码
how to print a char pointer with out getting gibberish?
所以我试图计算一个字符串,我在一个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() );
相关文章:
- 函数向量_指针有不同的原型,我可以构建一个吗
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 引用一个已擦除类型(void*)的指针
- 修改函数中的指针(将另一个指针作为参数传递)
- 如何将指针从一个void函数传递到另一个C++
- 如何在没有数据拷贝的情况下从指针创建一个Eigen VectorXd对象
- 如果C++对象的类在另一个boost模块中声明,如何使用boost将指向该对象的指针返回到python
- 为什么我们要为avl树实现返回一个指向节点的指针,而不是void函数
- 不明白迭代器,引用和指针失效,一个例子
- 为什么C++对链表中的下一个节点使用指针,而像 C# 或 Java 这样的语言只使用类 Node 的名称?
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 将指针分配给另一个指针时会发生什么情况?
- 将指向给定子类的指针从一个向量复制到另一个向量
- C++将一个指针分配给另一个指针时执行的类型检查
- 创建一个棋盘格或"Interweave"两个链接列表。IE 更改两个链表的指针
- 给定一个指向堆分配内存的指针,智能指针实现如何为其找到合适的释放函数?
- 取消引用结束指针到数组类型的一个
- 更改一个指针后更改乘法对象
- const和指针(一个节点示例)
- 从函数返回指针.一个指针的值未更新