gpt4 book ai didi

c++ - 使用 += 将字符分配给 char 数组

转载 作者:行者123 更新时间:2023-11-27 23:19:26 28 4
gpt4 key购买 nike

目前,我正在编写一个相当广泛的家庭作业,其中包括读取文件、构建二叉搜索树并将其输出。

在所有内容的某个地方,我编写了一个递归方法来按顺序输出二叉搜索树的值。

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。

关于我如何构建动态字符数组的任何线索,使用 += 多次为其赋值并在不触发访问冲突的情况下输出它?很抱歉问了一个相当基本的问题,但我是 C++ 的新手。

感谢和问候,

丹尼斯

最佳答案

我猜既然你不能使用 std::string,你也不能使用 new[]

您可以使用这样的函数连接字符串:

char *concat(const char *s1, const char *s2)
{
size_t len = strlen(s1) + strlen(s2);
char *result = (char*)malloc(len+1);
strcpy(result, s1);
strcat(result, s2);
return result;
}

这可以更有效地完成,但这对家庭作业来说可能无关紧要。并且你需要检查错误等等。

您还需要决定谁将在 s1s2 上调用 free

就其值(value)而言,高效版本如下所示:

char *concat(const char *s1, const char *s2)
{
size_t len1 = strlen(s1);
size_t len2 = strlen(s2);
char *result = (char*)malloc(len1+len2+1);
memcpy(result, s1, len1);
memcpy(result+len1, s2, len2);
result[len1+len2] = '\0';
return result;
}

它的效率更高,因为它只遍历输入字符串一次。

关于c++ - 使用 += 将字符分配给 char 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14360023/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com