【发布时间】:2021-01-22 13:13:21
【问题描述】:
假设我有一个“字符串数组”数组:
{"hello", "I", "am", "C", NULL, "And", "I", "am", "C++", NULL, "Now", "this", "is", "Java", NULL, NULL}
我怎样才能从这个数组中提取出NULL-终止的子数组,以便我可以拥有以下内容:
char* arr1[] = {"hello", "I", "am", "C", NULL}
char* arr2[] = {"And", "I", "am", "C++", NULL}
char* arr3[] = {"Now", "this", "is", "Java", NULL}
这个数组本身作为参数传递给函数,如下所示:
void function(char* strings[])
{
int index = 0;
loop:
while(strings[index])
{
if(!strings[index + 1]) break;
// how can I add stuff to an array?
++index;
}
if (strings[index] || strings[index + 1]) goto loop;
// Now what?
}
编辑:我想要字符串的实际副本,可能是strdup()。
编辑 2:我的尝试添加了,因为这是被要求的(我应该在一开始就提供它)。此外,该函数不需要返回任何内容:所有处理都在内部完成,然后字符串被丢弃(或存储在其他地方),因此strdup()。
【问题讨论】:
-
你应该只循环输入数组,当你找到一个 NULL 时结束一个子数组。
-
应该只复制指针还是需要复制实际的字符串?
-
不可能知道结果中有多少以 null 结尾的字符串数组。
function的返回类型应该是char***而不是void。 -
OT:将子字符串存储在 3 个不同的数组中似乎是一个相当糟糕的主意。这样做意味着该函数将无法处理具有 4 或 5 或 ... 或 100 个子字符串的输入。使用指向 char 指针数组的指针数组。
-
无论如何 - 对于这个任务
realloc是你的朋友