#define LINE_LEN 80
#define MAX_ARGS 64
#define MAX_ARG_LEN 64
#define MAX_PATHS 64
#define MAX_PATH_LEN 96
#ifndef NULL
#define NULL 0
#endif
...
struct command_t {
char *name;
int argc;
char *argv[MAX_ARGS];
};
...
/* Command initialisation, allocate type command */
struct command_t command;
command.name = (char *) malloc(LINE_LEN);
command.argc = 0;
for(ii=0; ii < MAX_ARGS; ii++) { /* i < 64 */
command.argv[ii] = (char *) malloc(MAX_ARG_LEN);
}
... передать некоторые значения в command.argv, у меня есть что-то вроде command.argv [0] = "man" и command.argv [1] = "сокет", command.argc = 2, command.name = "name", например, вот так
command.name = "man"
command.argc = 2
command.argv[0] = "man"
command.argv[1] = "socket"
command.argv[2] = ""
command.argv[3] = ""
...
command.argv[63] = ""
, тогда возникает вопрос, когдаЯ сделал ниже:
char *argTemp[command.argc+1];
for(ii = 0; ii < command.argc+1; ii++){
if(strlen(command.argv[ii])){
argTemp[ii] = (char *)malloc(strlen(command.argv[ii])+1); /*added +1*/
/* argTemp[ii] = command.argv[ii]; */
/*delete the line above, problem still exist*/
strcpy(argTemp[ii], command.argv[ii]);
} else {
argTemp[ii] = (char*)NULL;
}
}
Распределение памяти для команды прошло успешно, все работает для команды.однако, используя ту же технику для argTemp [], в отладчике я вижу, что argTemp равен [0], в нем ничего нет и он ни на что не указывает.Я не понимаю почему?Я ожидаю увидеть artTemp [] таким же, как command.argv [], только избавиться от лишней нулевой памяти.как это:
argTemp[0] = "man"
argTemp[1] = "socket"
argTemp[3] = "\000"
, то есть больше не argTemp, тогда я освобожу command.argv и указываю command.argv на argTemp.Таким образом, вы, вероятно, видите, что все, что я пытаюсь сделать здесь, это избавиться от памяти с нулевым значением в command.argv.