如何将字符指针数组拆分为两个字符指针数组
How to split char pointer array into two char pointer arrays
我的问题是如何将 argv
分成两部分并将这些部分存储在两个变量中。
我希望我的程序先获取参数,然后是分隔符,然后再获取参数,如下所示:
./program parameter1 parameter2 \: parameter3 parameter4
如您所见,转义后的“:
”将起到分隔符的作用,将数组分成两部分。
现在我想要一个 char *arr1[]
来容纳 parameter1
和 parameter2
以及另一个 char *arr2[]
来容纳 parameter3
和 parameter4
。参数可以有不同的长度。
如何拆分 argv
并将各种参数保存在两个 char *[]
中?
最后我想访问(考虑到我的例子)arr1[0]
,它里面应该有字符串 parameter1
,arr1[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]);
}
我的问题是如何将 argv
分成两部分并将这些部分存储在两个变量中。
我希望我的程序先获取参数,然后是分隔符,然后再获取参数,如下所示:
./program parameter1 parameter2 \: parameter3 parameter4
如您所见,转义后的“:
”将起到分隔符的作用,将数组分成两部分。
现在我想要一个 char *arr1[]
来容纳 parameter1
和 parameter2
以及另一个 char *arr2[]
来容纳 parameter3
和 parameter4
。参数可以有不同的长度。
如何拆分 argv
并将各种参数保存在两个 char *[]
中?
最后我想访问(考虑到我的例子)arr1[0]
,它里面应该有字符串 parameter1
,arr1[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]);
}