这是“受欢迎”的问题所以我已经检查了类似的主题,但仍然没有解决我的问题。
如何声明二维数组来保存“字符串” - 我需要一组字符数组AFAIK - 并将它作为参数连接到5个函数,我可以通过引用传递它并更新动态内容所以跟随功能可以比较它。 (我可能会得到10个“字符串”甚至空数组,所以我想用动态数组正确地执行它。因为系统不同,数组内容不同。
“string”=> C风格字符串又名字符数组。 MAXLEN< 32;
C解决方案会更加不受欢迎,但如果矢量可以起作用,为什么不行。
答案 0 :(得分: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()
为每个元素获取指向C风格字符串的常量指针。
答案 1 :(得分: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