плохой адрес, пустой адрес - PullRequest
0 голосов
/ 26 октября 2018

Я пытаюсь использовать execvp, и он работал нормально, но теперь я нашел способ объявить аргументы, и теперь я получаю «неверный адрес» как ошибку.Я выдал много таких же проблем, и проблема заключалась в том, что NULL был последним аргументом.

Я пробовал множество способов добавить NUll в конец, но он не работает.

char *args4exec[5];

 switch(argsi)
      {
        case 1:
          printf("case 1 arg\n" );
          strcpy(&args4exec[0],command);
          strcpy(&args4exec[1],args[i-1]);
          args4exec[2] = NULL;
          break;
        case 2:
          printf("case 2 args\n" );
          strcpy(&args4exec[0],command);
          strcpy(&args4exec[1],args[i-2]);strcpy(&args4exec[2],args[i-1]);
          strcpy(&args4exec[3], NULL);
          break;
      }
    }

    if (execvp( args4exec[0], args4exec) == -1 )
      perror("exec failed");

strcpy и нормальное определение не работает, кто-нибудь может мне помочь?Размещенный мною код не работает, но он должен показать способы, которыми я пытался добавить NULL.

1 Ответ

0 голосов
/ 26 октября 2018

перед копированием command или другой строки в args4exec, вы должны выделить для нее память:

char *args4exec[5];
char *command = "Hello";
args4exec[0] = malloc(sizeof(char) * strlen(command));

Также здесь есть ошибка в вашем strcpy() компиляторе, который должен предупредить об этом. Должно быть так:

strcpy(args4exec[0], command);

если вы используете gcc compile с -Wall -Wextra -Werror.

И вам следует проверить args[i - 2] и другие параметры, чтобы убедиться, что они хранят правильные значения, а не выходят за пределы.

...