int enter_path(char** path) {
char* standard = "./questions.txt";
printf("\n\t%s\n\t%s",
"Please enter the file location.", "path: ");
fgets(*path, MAX_PATH_LENGTH ,stdin);
*(*path + (strlen(*path)-1) ) = '\0';
if(**path == '\n' )
*path = strdup(standard);
return 0;
}
int main(void){
char* path = malloc(MAX_PATH_LENGTH);
enter_path(&path);
some_other_function_using_the_path_string(path);
}
上記のコードは正常に動作します。これを投稿する理由は次のとおりです。
ポインター「パス」のアドレスを関数enter_pathに渡す必要があるのはなぜですか。これにより、他の関数が変更された値を使用/読み取ることができます。つまり、「enter_path」関数を呼び出すときに &-operand を使用する必要があり、enter_path を「int enter_path(char* path);」として定義できないのはなぜですか。
これが int や long などのデータ型を参照する通常の変数であることはわかっていますが、ポインターを操作する場合、他のすべての関数で変更が表示されるはずだと思いました。ポインターがメモリ内の同じポイントを参照しているため、値が変更されているだけです。
私はこれをすべて間違って見ているのでしょうか?
PS: コードを ansi-C に準拠させるために最善を尽くしています。これが、readline の代わりに fgets を使用している理由です。readline 関数の方が使いやすい/安全であるという事実に関して、すでにいくつかのコメントを受け取っているからです。
敬具、JD