-2

我需要一个数组来存储可变大小的 char 数组。我可以使用向量或其他任何东西,但不幸的是,这是针对 MPI 项目的,我被迫使用数组,所以我可以使用MPI::COMM_WORLD.Send(...)函数发送它。

我的想法来自这个链接

这是我遇到的问题的简化示例:

char* arrayStorage[3]; //I want to store 3 char arrays of variable size!
int index = 0;

char array_1[RANDOM_SIZE] = {.....};
char array_2[RANDOM_SIZE] = {.....};
char array_3[RANDOM_SIZE] = {.....};

arraySorage[index] = array_1;
index++;    
arraySorage[index] = array_2;
index++;
arraySorage[index] = array_3;
index++;

我也看到人们谈论malloc类似的东西,但我对指针知之甚少。我有malloc,我必须打电话free,我不知道在哪里,所以我现在避免这样做。

这段代码显然不起作用,array_1, array_2,array_3都可以,但是当我尝试访问它们时,我得到了垃圾。问题似乎在索引变量内部。也许我不应该做 index++,也许我应该做 index += RANDOM_SIZE,但这也失败了。

如何将可变大小的 char 数组存储在数组中?

4

1 回答 1

2

使用 malloc 和 free(或 C++ 中的 new 和 delete)。你也可以用向量来做——因为向量可以被视为数组。

 char *str = "hello world";
 // need the +1 for null character
 arraySorage[0] = (char *)malloc (strlen(str) + 1); 
 strcpy(arraySorage[0], str);
 ...
 free(arraySorage[0]);

新/删除

arraySorage[0] = new char[strlen(str)+1];

strcpy(arraySorage[0], str);
...
delete arraySorage[0];

使用 vector 和 std::string 是正确的 C++ 方式,原因有很多,包括不泄漏内存和正确处理异常。

于 2012-10-05T16:12:16.957 回答