Char Array et getline en 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); 

J’ai un problème dans le code ci-dessus. Si j’utilise getline ou même fgets pour obtenir les entrées de l’utilisateur depuis le terminal et tapez "ls" par exemple, execvp indique qu’il n’y a “aucun fichier ou répertoire de ce type”. Mais si je mets des commands[0]="ls" il fonctionne correctement. Quelle pourrait être la raison?

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

Cette logique pour supprimer le ‘\ n’ semble incorrecte. Je pense que cela devrait être:

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