繁体   English   中英

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

[英]Passing 2-D array with dynamic size between functions in C/++

这是“受欢迎的”问题,因此我已经检查了类似的线程,但仍然无法解决我的问题。

如何声明二维数组以容纳“字符串”-我需要字符数组AFAIK的数组-并将其用作5个函数的参数,在此可以依次引用并动态更新内容,以便后续函数可以比较一下。 (我可能会得到10个“字符串”或什至是数组,因此我想正确地处理动态数组,因为系统之间的coz数组内容不同)。

“ string” => C样式字符串,又称字符数组。 MAXLEN <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 '\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样式字符串的const指针。

假设使用C ++; 为此,我认为使用向量将字符串字符串(字符串用作第二维)没有问题:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM