在C++中将字符数组附加到字符串

11

我有一个256个字符或char myArray[256]的字符数组,只有前面几个实际存储了任何信息。

myArray[0] = 'H';
myArray[1] = 'E';
myArray[2] = 'L';
myArray[3] = 'L';
myArray[4] = 'O';
myArray[5] = NULL;
myArray[6] = NULL;
// etc...

我不一定知道数组中确切的内容,但我想将其中的内容(减去空字符)复制到我的缓冲字符串string buffer中。

我认为实现这个目标的适当方法是进行以下操作:

buffer.append(myArray);

程序应该在遇到空字符时停止读取值,但我没有看到这种行为。我看到它将整个数组复制到我的缓冲区中,包括空字符等所有内容。正确的做法是什么?

编辑:提供一些可行的代码以使事情更容易

#include <string>
#include <iostream>

using namespace std;

int main()
{
    string buffer;
    char mychararray[256] = {NULL};

    mychararray[0] = 'H';
    mychararray[1] = 'e';
    mychararray[2] = 'l';
    mychararray[3] = 'l';
    mychararray[4] = 'o';

    buffer.append(mychararray);

    cout << buffer << endl;

    return 0;
}

刚意识到我没有正确地初始化空值,而我的原始方法是有效的。抱歉浪费了大家的时间。


2
你的“工作代码”完全不同。你缺少了=NULL部分。哪一个是正确的? - Luchian Grigore
@LuchianGrigore,在C++中,索引4之后的mychararray所有值默认都不是NULL吗?(这是一个实际问题,我对C++相当不熟悉)? - username tbd
3
@usernametbd 不行 - 如果你想让它们为0,就需要明确地将它们设置为0,或者这样做:char mychararray[256] = { 0 }; - Nik Bougalis
你的代码(顶部带有nulls)应该可以工作-请参见http://www.cplusplus.com/reference/string/string/append/... 'append'如何知道'mychararray'的大小? - sje397
一旦添加了空终止符(链接),您的代码应该可以正常工作。 - Sergey Kalinichenko
2个回答

11

尝试使用

buffer += myArray;

应该这样做。如果您将数组以空字符结尾,append 也可以使用。


3
这应该可以解决问题:
int c;
while(myArray[c] != NULL) {
  buffer.append(1,myArray[c]);
  ++c;
}

此外,您应该这样做:myArray[5] = '\0'

1
=NULL='\0' 是等价的。 - Luchian Grigore
1
他没有初始化数组,这就是为什么他应该把它放进去。 - hinafu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接