我需要一个数组来存储可变大小的char数组。我可以使用向量或其他任何东西,但不幸的是,这是一个MPI项目,我被迫使用一个数组,所以我可以使用MPI::COMM_WORLD.Send(...)
函数发送它。
我的想法来自this link。
这是我遇到的问题的简化示例:
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数组?
答案 0 :(得分: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]);
with new / delete
arraySorage[0] = new char[strlen(str)+1];
strcpy(arraySorage[0], str);
...
delete arraySorage[0];
使用vector和std :: string是正确的C ++方式,原因很多,包括不泄漏内存和正确处理异常。