Существует 1 проблема:
- Тип массива
argv
довольно ограничен в управлении параметрами программы.
Следовательно, лучшая практика всегда заключается в использовании указателя массива аргументов argv
без изменения его структуры данных: char **argv
.
Таким образом,Вы можете легко передать или использовать массив в своих исходных кодах.
Вот краткий пример (протестирован с gcc
, amd64
в ОС Debian), полученный из ваших фрагментов кода:
#include <stdio.h>
int argi;
char **args;
int foo(void) {
int i;
for (i=0; i<argi; i++) {
printf("argv[%d]: %s\n", i, args[i]);
}
printf("\n");
return 0;
}
int main(int argc, char **argv) {
argi = argc;
args = argv;
return foo();
}
Если вы скомпилируете и запустите, вы должны получить следующее:
u0:demo$ ./a.out
argv[0]: ./a.out
u0:demo$ ./a.out one
argv[0]: ./a.out
argv[1]: one
u0:demo$ ./a.out one two
argv[0]: ./a.out
argv[1]: one
argv[2]: two
u0:demo$ ./a.out one two three
argv[0]: ./a.out
argv[1]: one
argv[2]: two
argv[3]: three
u0:demo$
ОБНОВЛЕНИЕ
Fri Apr 19 16:46:05 +08 2019
:
- устранена проблема «указатель строки», поскольку она была недопустимой, поскольку указатель строки указателя строки представлен
char *variable
, а не char *variable[]
.