Как разбить массив указателей char на два массива указателей char

Мой вопрос в том, как я могу разделить 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?

Заранее спасибо!

Вы знаете, как объявить arr1 и arr2? Вы знаете, как перебирать argv? Вы умеете сравнивать строки? и т. д. Пожалуйста, покажите столько кода, сколько вы умеете делать, как минимальный воспроизводимый пример. В противном случае трудно точно знать, какие части вы можете сделать, а в какой части вам нужна помощь.

kaylum 17.05.2022 22:21

@kaylum Я согласен, я не совсем ясно задал свой вопрос. Проблема заключается в сохранении параметров в двух разных char *arr[]. Я не знаю, как это сделать, потому что я знаю только, как инициализировать массив значением. Будет редактировать!

Maxim 17.05.2022 22:25

@Oka Спасибо за ваш комментарий, это отличный и лучший способ начать вторую часть параметров!

Maxim 17.05.2022 22:25
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
0
3
25
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Не! Это все указатели. Вместо этого используйте указатели — начальный указатель и конечный указатель или начальный указатель и количество элементов — для представления «диапазона» внутри исходного массива.

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]);
}

Отлично работает, огромное спасибо!

Maxim 17.05.2022 22:50

Другие вопросы по теме