0

chdir を使用してプロセスの作業ディレクトリを変更しようとしています。現在のディレクトリにappleディレクトリがあるとします。プロンプトに「apple」と入力すると、返される結果が -1 になるのはなぜですか? apple と入力すると、文字列の最後に '\n' 文字も付けられるためですか? また、変数を使用して格納できる場合、ディレクトリを変更する意味は何ですか?

#include<stdio.h>
#include<string.h>
#include<errno.h>
#include<unistd.h>

int main(void){
    char path[256];
    fgets(path, 256, stdin);
    printf("%s", path);
    int result = chdir(path);
    if(result != 0){
        printf("%d\n", result);
    }
}
4

1 に答える 1

4

fgets() 結果にサフィックスを付けてEOF(受信していない場合)\n改行を読み取り (IXish システムの場合)、これを に渡すchdir()と、ディレクトリ名がほとんどのように変更されるため、後者がチョークされます。

からman fgets()私によるイタリック体):

fgets()は、stream から最大で size 未満の 1 文字を読み取り、s が指すバッファーに格納します。EOF または改行の後、読み取りは停止します。改行が読み取られると、バッファに格納されます。


デバッグに関する注意:印刷する「文字列」( によって読み取られるfgets())を次のように引用符で囲む場合

printf("'%s'", path);

末尾の に気づいたかもしれません\n

于 2015-09-20T12:58:16.310 に答える