0

次のコードがあります。

int main(void) {
    char in[100];
    printf("> ");
    fgets(in, sizeof(in), stdin);
    int pid;
    char *f[100];
    char *v;
    int i = 1;
    v = strtok(in, " ");
    f[0] = v;
    while (v = strtok(NULL, " ")){
        f[i] = v;
        i++;
    }
    f[i] = NULL;
    execvp(f[0], f);
    perror("FAILED");
    exit(1);
}

何らかの理由で、「ls -l」や「date」などを入力すると、そのようなファイルやディレクトリがないと表示されます。私がコードに書いたとき:

f[0] = "ls";
f[1] = "-l";
f[2] = NULL;

それはうまくいきました。何か案は?

4

2 に答える 2

3

コードに小さな間違いがあります。fgets関数の使い方についてです。fgets を使用すると、改行文字とともに入力として与えられた全体が文字列 v に取り込まれます。fgets 関数の後に次の 2 行を追加するだけで、コードは正常に動作します。

int size = strlen(in);
in[size-1] = '\0';

これは、文字列から改行文字を削除するだけです。

したがって、ls -l[ENTER] を押すと。ls は最初の単語 f[0] で取得され、-l'\n' は f[1] で取得され、execvp は ls -l'\n' で検索および実行できません。

于 2013-02-14T04:31:00.543 に答える
0

試す:

char* str;
str = strtok(inputBuffer," \n");
于 2016-06-17T01:24:38.223 に答える