Char Array и getline в C

int bytes_read; int rv; int nchars = 200; /*max possible number for the input of the user*/ size_t nbytes = nchars; /*size of chars in bytes*/ char *commands[2]; char *line = malloc(nbytes + 1); bytes_read = getline(&line, &nbytes, stdin); /*read line from stdin*/ if (bytes_read == -1) { printf("Read line error"); exit(-1); } else { if (line[strlen(line-1)] == '\n') { line[strlen(line-1)] = '\0'; /*change new line character in the end of the line of stdin*/ } } if (strcmp(line,"exit") == 0) { rv = 3; exit(rv); } commands[0] = line; commands[1] = NULL; execvp(commands[0], commands); perror("Execution error"); exit(-1); 

У меня проблема в коде выше. Если я использую getline или даже fgets чтобы получить вход от пользователя из терминала и наберите "ls" например, execvp prints, что «нет такого файла или каталога». Но если я положу commands[0]="ls" он работает правильно. Что может быть причиной?

 if (line[strlen(line-1)] == '\n') { line[strlen(line-1)] = '\0'; /*change new line character in the end of the line of stdin*/ 

Эта логика для удаления ‘\ n’ выглядит некорректно. Я думаю, это должно быть:

 if (line [ strlen(line) - 1 ] == '\n' ) line [ strlen(line) - 1 ] = '\0'; /*change new line character in the end of the line of stdin*/