【发布时间】:2013-01-16 13:55:01
【问题描述】:
目前,我正在编写一个相当广泛的家庭作业,其中包括读取文件、构建二叉搜索树并将其输出。
在其中的某个地方,我编写了一个递归方法来按顺序输出二叉搜索树的值。
void output(node* n)
{
if(n->leftChild != NULL)
output(n->leftChild);
cout << n->keyAndValue << " || ";
outputString += n->keyAndValue << '|';
if(n->rightChild != NULL)
output(n->rightChild);
}
这没问题,但是您会注意到outputString += n->keyAndValue << '|'; 这一行,因为我还希望将所有值都包含在一个 char 数组中(我不允许使用字符串或其他更当前的 C++ 功能),我以后可以在不同的方法中使用(例如 Main 方法)。
Char-Array 声明如下:
char *outputString;
这只是我尝试过的方法之一。我还尝试使用const 关键字并定期构建一个数组char outputString[]。使用我向您展示的版本,当稍后在程序中以不同的方法调用以下代码时遇到错误:
cout << outputString;
我收到以下错误:
BST.exe 中 0x008c2c2a 处未处理的异常:0xC00000005:访问冲突读取位置 0x5000000000。
关于如何构建动态 char 数组、使用 += 多次为其赋值并在不触发访问冲突的情况下输出它的任何线索?很抱歉问了一个相当基本的问题,但我对 C++ 完全陌生。
感谢和问候,
丹尼斯
【问题讨论】:
-
任何阻止你使用
std::string的人都应该被带到外面并开枪。一周的每一天。 -
您是否最终向 SO 社区证明您无法拿起一本 C++ 书籍并阅读它?
-
@DavidHeffernan 这是家庭作业。
-
你不能像这样附加到字符指针,更不用说
outputString += n->keyAndValue << '|'即使在std::string上也不会像写的那样工作。如果你被限制在char*这将是不必要的困难,但是考虑用malloc创建一个“非常大”的缓冲区,然后用strcat附加到它。 -
因为这是家庭作业,我只会向您指出
malloc的大致方向,然后就这样吧。当然,如果允许,您应该使用std::string而不是char*。