Мой вопрос в том, как я могу разделить 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?
Заранее спасибо!
@kaylum Я согласен, я не совсем ясно задал свой вопрос. Проблема заключается в сохранении параметров в двух разных char *arr[]. Я не знаю, как это сделать, потому что я знаю только, как инициализировать массив значением. Будет редактировать!
@Oka Спасибо за ваш комментарий, это отличный и лучший способ начать вторую часть параметров!
Не! Это все указатели. Вместо этого используйте указатели — начальный указатель и конечный указатель или начальный указатель и количество элементов — для представления «диапазона» внутри исходного массива.
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]);
}
Отлично работает, огромное спасибо!
Вы знаете, как объявить
arr1
иarr2
? Вы знаете, как перебиратьargv
? Вы умеете сравнивать строки? и т. д. Пожалуйста, покажите столько кода, сколько вы умеете делать, как минимальный воспроизводимый пример. В противном случае трудно точно знать, какие части вы можете сделать, а в какой части вам нужна помощь.