Ошибка сегментации при использовании strcpy () - PullRequest
0 голосов
/ 09 декабря 2018

Мы добавили операторы печати, чтобы проверить, где произошла ошибка сегментации.Сбой в strcpy (команда, токен);Как мы можем сохранить эту часть в команде?Также есть ли способ проверить наличие нулевого символа в конце токена?Имеет ли strtok () нулевой символ в конце при использовании?

    int main(int argc, char **argv)
{
  char *command, *flag, *pathname, *linkname;
  struct stat st = {0};
  char cmd[200];
  char *token; //Pointer
  int counter = 1; //Counter variable
  FILE *fp;
  char mode2[] = "0750"; //To set the permission of a file/path
  long j;
  char mode[] = "0640"; //To set the permission of a file/path
  long i;

  fgets(cmd, 200, stdin);
  printf("print for cmd: %s\n", cmd);

  //User input is tokenized to determine the proper commands are entered and executed
  token = strtok(cmd, " "); //Input is tokenized by white spaces.
  printf("token: %s\n", token);

  strcpy(command, token);

    printf("print for command: %s\n", command);

  if(token == NULL)
  {
        printf("Error with command input.\n");
        exit(EXIT_FAILURE);
  }

Ответы [ 2 ]

0 голосов
/ 09 декабря 2018

Вам нужно инициализировать переменную вашей команды * перед тем, как присваивать ей значение с помощью strcpy ().Ошибка сегментации произойдет, если вы попытаетесь присвоить значение указателю NULL.

Правильное использование strcpy () будет выглядеть так:

char *str = malloc(3 * sizeof(char));
char sentence[3] = "Hi\0";
strcpy(str, sentence);
printf("%s\n", str);
0 голосов
/ 09 декабря 2018

Вы никогда не назначаете значение command, тем более выделяете место для него, чтобы оно указывало.

...