如何将多维字符数组复制到字符 * 中

How to copy multi-dimensional char array into char *

本文关键字:字符 复制 数组      更新时间:2023-10-16

嗨,我正在寻找将多维字符数组复制到字符*字符串中 我能够将多维字符数组复制到 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 字符数组数据复制到字符 *字符串

假设这些操作是因此完成的,即首先你已经完成了这个:

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

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

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类。

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

如果一个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;
}
}