如何将字符指针数组拆分为两个字符指针数组

How to split char pointer array into two char pointer arrays

我的问题是如何将 argv 分成两部分并将这些部分存储在两个变量中。

我希望我的程序先获取参数,然后是分隔符,然后再获取参数,如下所示:

./program parameter1 parameter2 \: parameter3 parameter4

如您所见,转义后的“:”将起到分隔符的作用,将数组分成两部分。 现在我想要一个 char *arr1[] 来容纳 parameter1parameter2 以及另一个 char *arr2[] 来容纳 parameter3parameter4。参数可以有不同的长度。

如何拆分 argv 并将各种参数保存在两个 char *[] 中? 最后我想访问(考虑到我的例子)arr1[0],它里面应该有字符串 parameter1arr1[1] 里面应该有字符串 parameter2 .

编辑: 问题在于将参​​数保存到两个不同的char *arr[]中。我不知道该怎么做,因为我只知道如何用一个值初始化一个数组。

char *arr1[]; !error
char *arr1[10]; works, but what if I have more than 10 parameters?

提前致谢!

不要!这些都是指针。相反,使用指针 - 开始指针和结束指针或开始指针和元素计数 - 来表示源数组内的“范围”。

char **arr1 = &argv[1];
char **arr1end = arr1;
while (*arr1end != NULL) {
    if (strcmp(*arr1end, ":") == 0) {
         break;
    }
    arr1end++;
}
if (arr1end == NULL) { /* handle error - user did not give : argument */ }
size_t arr1cnt = arr1end - arr1;
// Array arr1 has arr1cnt elements.

char **arr2 = arr1end + 1;
char **arr2end = arr2;
while (*arr2end != NULL) {
    ++arr2end;
}
size_t arr2cnt = arr2end - arr2;
// arr2cnt represents arguments after `:`.

for (size_t i = 0; i < arr1cnt; ++i) {
      printf("arr1[%zu]=%s\n", i, arr1[i]);
}
for (size_t i = 0; i < arr2cnt; ++i) {
      printf("arr2[%zu]=%s\n", i, arr2[i]);
}