用+=将字符赋值给字符数组
Assigning chars to a char array with +=
目前我正在写一个相当广泛的家庭作业,其中包括读取一个文件,构建一个二叉搜索树并输出它。
在这里面我写了一个递归方法来按顺序输出二叉搜索树的值
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 << '|';
行,因为我也想在一个字符数组中拥有所有的值(我不允许使用字符串或其他c++的最新功能),我可以在以后的不同方法中使用(例如Main方法)。
Char-Array的声明如下:
char *outputString;
这只是我尝试过的方法之一。我还尝试使用const
关键字,只是定期建立一个阵列char outputString[]
。对于我向您展示的版本,当在程序后面的另一个方法中调用以下代码时,我遇到了一个错误:
cout << outputString;
我得到以下错误:
BST.exe中0x008c2c2a的未处理异常:0xC00000005:访问冲突读取位置0x5000000000.
任何线索,我如何能够建立一个动态字符数组,赋值给它无数次使用+=
和输出它而不触发访问违规?我很抱歉问了一个相当基本的问题,因为我对c++完全是新手。
Thanks and Regards,
丹尼斯我猜既然你不能使用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;
}
这可以更有效地完成,但这可能对家庭作业无关紧要。你需要检查错误,等等,等等。
您还需要决定谁将在s1
和s2
上调用free
。
对于它的价值,有效的版本看起来像这样:
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] = ' ';
return result;
}
它更有效率,因为它只遍历一次输入字符串。
+=
对指针进行指针运算,而不是字符串连接。最终,你得到了超出outputString
指向的数组的方法,并且试图打印它会导致段错误。
因为你不能使用std::string
,你需要使用strcat
以及new[]
和delete[]
,并确保你用new[]
分配了你的原始数组。
- 赋值给字符[8]的向量
- 为什么常量字符 INITIAL='G' 不是赋值语句?
- std::memcpy或显式字符值赋值-在C++中等于合法
- C++字符数组值赋值
- 字符常量数组为空,即使已为其赋值 [C++]
- 通过赋值运算符返回字符数组
- 在赋值后清除C++中固定字符数组的内容
- 字符串的C++向量,为什么赋值会导致相同的字符引用
- 无法在赋值中将字符(*)[50] 转换为字符*
- 字符赋值数组不起作用
- 蠢Q:将字符串赋值到字符数组中
- 赋值语句截断字符
- 将字符串字面值的第一个字符赋值给字符数组将赋值整个字符串字面值
- 赋值和相等操作符中的宽字符和字符
- 赋值,stry和strlen与字符数组n指针
- 在c++和c#中,对字符数组进行赋值和赋值时的值是不同的
- 为什么从字符串到字符数组的赋值缺少最后一个字符?
- c++字符赋值
- 用+=将字符赋值给字符数组
- c++中的字符赋值