如何使数组存储可变大小的char数组?

时间:2012-10-05 16:05:06

标签: c++ arrays variables multidimensional-array size

我需要一个数组来存储可变大小的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_1array_2array_3都可以,但是当我尝试访问它们时,我会变得垃圾。问题似乎在索引变量中。也许我不应该做index ++,也许我应该做index + = RANDOM_SIZE,但这也失败了。

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

1 个答案:

答案 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 ++方式,原因很多,包括不泄漏内存和正确处理异常。