[英]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.