c++ - 在 C/++ 中的函数之间传递具有动态大小的二维数组

标签 c++ c arrays dynamic-arrays character-arrays

这是一个“热门”问题,所以我已经检查了类似的主题,但仍然没有解决我的问题。

我如何声明二维数组来保存“字符串”——我需要字符数组的数组 AFAIK——并将它作为 5 个函数的参数一个接一个地使用,我可以通过引用传递它并更新动态内容,因此以下功能可以对其进行比较。 (我可能会得到 10 个“字符串”甚至 数组,所以我想用动态数组正确地做到这一点,因为数组内容因系统而异)。

"string"=> C 风格字符串又名字符数组。麦克斯伦 < 32;

C 解决方案会更令人讨厌,但如果 vector 可以工作,为什么不呢。

最佳答案

一种可能的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 '\0')
    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 风格字符串的常量指针.

关于c++ - 在 C/++ 中的函数之间传递具有动态大小的二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7191266/

相关文章:

c++ - 对结构体 vector 进行排序 C++

C++ 结构数组和相等数组之间的区别

c - 解除分配链表

c - 如何生成数字列表的所有排列?

PHP json_encode 将行作为对象而不是数组返回

c++ - 使用 zlib/minizip : C/C++ Application 解压 zip 文件

c - GTK C - `GtkStock’ 和 `GTK_CAN_FOCUS` 已弃用

php - 使用条件从 Php 数组中提取

javascript - 在 jQuery 中循环数组来更改 CSS

c++ - 在Linux上的C++中执行Shell命令xdotool