5

C は初めてで、chdir() の使用に問題があります。関数を使用してユーザー入力を取得し、これからフォルダーを作成し、そのフォルダーに chdir() して、さらに 2 つのファイルを作成しようとします。ただし、ファインダーを介して(手動で)フォルダーにアクセスしようとすると、権限がありません。とにかく、ここに私のコードがあります。ヒントはありますか?

int newdata(void){
    //Declaring File Pointers
    FILE*passwordFile;
    FILE*usernameFile;

    //Variables for
    char accountType[MAX_LENGTH];
    char username[MAX_LENGTH];
    char password[MAX_LENGTH];

    //Getting data
    printf("\nAccount Type: ");
    scanf("%s", accountType);
    printf("\nUsername: ");
    scanf("%s", username);
    printf("\nPassword: ");
    scanf("%s", password);

    //Writing data to files and corresponding directories
    umask(0022);
    mkdir(accountType); //Makes directory for account
    printf("%d\n", *accountType);
    int chdir(char *accountType);
    if (chdir == 0){
        printf("Directory changed successfully.\n");
    }else{
        printf("Could not change directory.\n");
    }

    //Writing password to file
    passwordFile = fopen("password.txt", "w+");
    fputs(password, passwordFile);
    printf("Password Saved \n");
    fclose(passwordFile);

    //Writing username to file
    usernameFile = fopen("username.txt", "w+");
    fputs(password, usernameFile);
    printf("Password Saved \n");
    fclose(usernameFile);

    return 0;


}
4

2 に答える 2

5

実際にディレクトリを変更するのではなく、 の関数プロトタイプを宣言するだけですchdir。次に、その関数ポインターをゼロ (と同じNULL) と比較し続けるため、失敗します。

<unistd.h>プロトタイプのヘッダー ファイルをインクルードしてから、実際に関数を呼び出す必要があります。

if (chdir(accountType) == -1)
{
    printf("Failed to change directory: %s\n", strerror(errno));
    return;  /* No use continuing */
}
于 2013-01-06T05:25:09.490 に答える
3
int chdir(char *accountType); 

関数を呼び出していない場合は、代わりに次のコードを試してください。

mkdir(accountType); //Makes directory for account
printf("%d\n", *accountType);
if (chdir(accountType) == 0) {
    printf("Directory changed successfully.\n");
}else{
    printf("Could not change directory.\n");
}

また、printf行は疑わしいように見えます.print accountType文字列が必要だと思います:

printf("%s\n", accountType);
于 2013-01-06T05:30:52.370 に答える