如何将多维char数组复制到char *

时间:2018-08-30 08:57:30

标签: c++

嗨,我正在寻找将多维char数组复制到char * string中的方法 我可以将多维char数组复制到std :: string结果中。

string result;

for (int i=0; i < key; i++)
    for (int j=0; j < text.length(); j++)
        if (rail[i][j]!='\n')
            result.push_back(rail[i][j]);`

同样,我想将2D char数组数据复制到char * string

3 个答案:

答案 0 :(得分:0)

您可以从C ++字符串对象获取char *字符串。有一个函数c_str()从C ++字符串返回C字符串。

答案 1 :(得分:0)

如果char *string表示c样式的字符串(即char个字符的数组),则需要在下面的代码中跟踪最新位置(index) ),然后依次设置每个字符。这是为了避免复制。否则,请先构造字符串,然后使用c_str(),如其他答案所述。

#include <vector>
#include <iostream>
using std::vector;

#include <string>
using std::string;

int main() {
    const int key = 2;
    string text = "ab";
    string rail[2] = {text, text};

    char result[key * 100];
    int index = 0;
    for (int i=0; i < key; i++)
        for (int j=0; j < text.length(); j++)
            if (rail[i][j]!='\n')
                result[index++] = rail[i][j];

    for (int i = 0; i < index; i++) {
        std::cout << result[i] << " " << std::endl;
    }
}

答案 2 :(得分:0)

让我们假设这些操作都已完成,也就是说,首先您已经完成了此操作:

std::string result;
for (int i=0; i < 2; i++)
    for (int j=0; j < len; j++)
            result.push_back(Array[i][j]);

那么您已经 一个存储在std::string中的char *数组。

char  *string = new char[result.size()];
string = strdup(test1.c_str());

现在,如果跳过std :: string步骤(为什么平台不支持该步骤?),您宁愿得​​到这样的内容:

char  *string = new char[string_size];   // you have to either measure it beforehand or calculate from array size

int counter = 0;
for (int i=0; i < 2; i++)
    for (int j=0; j < len; j++)
            string[counter++] = Array[i][j];

如果这是C代码,则用new调用替换malloc表达式。而且此代码存在缺陷,例如您要么分配的内存超过了所需的内存,要么应该在分配缓冲区之前计算缓冲区的长度。极端的情况是在达到其容量时重新分配缓冲区。 std::string自动做到这一点。

除非您没有告诉我们一些有关您需要的重要信息,否则我不明白为什么这可能是一个设计难题。

通常,除非您设计自己的容器,否则C ++代码永远不会像这样。在与ISO兼容的平台上,在大多数嵌入式系统上,您将拥有std :: string,例如Arduino,您将可以访问String类。