1

这是“流行”的问题,所以我已经检查了类似的线程,但仍然没有解决我的问题。

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

"string" => C 风格的字符串,也就是字符数组。MAXLEN < 32;

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

4

2 回答 2

3

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().

于 2011-08-25T13:36:39.677 回答
2

假设 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
于 2011-08-25T13:41:25.693 回答