1
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打印出「沒有這樣的文件或目錄」。但如果我把commands[0]="ls"
它正確運行。可能是什麼原因?Char陣列和C中的getline
在開始時,'line [strlen(line-1)]'應該是'line [strlen(line)-1]'...另外,請格式化您的代碼當問關於SO的問題時。 –
什麼是getline?你沒有使用C++,因爲這些將是錯誤的論點......請發佈它的源代碼。 – nneonneo
謝謝@ conrad-meyer!並感謝關於代碼的提示。 –