在C/++函数之间传递动态大小的二维数组
Passing 2-D array with dynamic size between functions in C/++
这是一个"流行"的问题,所以我已经检查了类似的线程,但仍然没有解决我的问题。
我如何声明二维数组来保存"字符串"-我需要字符数组AFAIK数组-并将其用作5个函数的参数,一个接一个,我可以通过引用传递它并动态更新内容,以便下面的函数可以比较它。(我可能会得到10个"字符串"甚至空数组,所以我想正确地使用动态数组,因为数组内容因系统而异)。
"string" => C风格字符串,即字符数组。MAXLEN & lt;32;
C的解决方案更令人讨厌,但如果向量可以工作,为什么不呢?
一种可能的C语言解决方案如下:
char **p_strings = calloc(num_strings, sizeof(*p_strings));
for (i = 0; i < num_strings; i++)
{
// Allocate storage for the i-th string (always leave room for ' ')
p_strings[i] = calloc(len_string[i]+1, sizeof(*p_strings[i]));
}
...
// Call a function
my_function(p_strings, num_strings);
当你用完这些数据后,你需要记住free
所有这些数据。
如果你需要改变字符串的长度,或者改变字符串的数量,你将不得不做一些相当痛苦的重新分配。所以,如果你在c++中工作,你可能应该只使用std::vector<std::string>
。
std::vector<std::string> strings;
strings.push_back("Foo");
strings.push_back("Bar");
...
my_function(strings);
您甚至可以使用c_str()
为每个元素获得指向c风格字符串的const指针。
假设c++;对于这一点,我认为使用vector to string (string作为第二次元)没有问题:
void foo(vector<string> v) {
cout << v[0]; // Assuming the elements exist!
}
int main(int argc, char *argv[])
{
vector<string> vString; // Make the vector
vString.push_back("something"); // Add a string
foo(vString); // Print out 'something'
}
在你的编辑中,你还描述了唯一会改变的是实际的字符串,所以当需要时,你可以初始化长度为:
的向量,而不是push_back
你的字符串。vector<string> vString(10); // Assuming a size of 10
,然后正常使用:
vString[4] = "something";
和(作为对注释的响应),在运行时调整大小:
vString.resize(15); // Make it bigger, generates new blank strings
相关文章:
- C++ 中动态二维数组的访问冲突
- 在 c++ 中分配布尔值的动态二维数组时超出内存限制
- 在创建动态二维数组时,在A[i*c+j]中使用c有什么用,即c代表什么
- 如何在C++中将字符串的动态二维数组作为参数传递
- 私有属性C++上的动态二维数组
- 如何在C++中将动态二维数组传递给函数
- C++ 中动态二维数组中的地址
- 如何在C++中创建动态二维数组
- 将动态二维数组的返回指针传递给子函数并对该数组进行寻址
- 动态二维数组的复制构造函数
- 动态二维数组初始化
- 将动态二维数组中的所有值设置为一个设定值
- 获取动态二维数组元素的行/列
- 动态二维数组,列大小变化,不知道提前
- OpenCV,显示动态二维数组作为图像(到Mat对象)
- 如何使用memset初始化动态二维数组
- hdf5c++接口:编写动态二维数组
- 通过指针或值修改动态二维数组行
- 如何在动态二维数组中存储数据,在结构体中声明,该结构体也被c++中的另一个结构体使用
- 用模板释放动态二维数组