4

fopen と fgets を使用するときに、コードで変数ではchar*なく変数を使用していたことに気付きましたが、コードは機能します。FILE*これはなぜですか?私のコードのセクションは次のとおりです。

...
char* filePath = ac->filepath;
char* line = malloc(sizeof(char) * MAX_CHAR_PER_LINE) ;
filePath = fopen(filePath, "r"); // we are assigning the result to a char*, not FILE*
if (filePath == NULL) {
    printf ("\n[%s:%d] - error opening file '%s'", __FILE__, __LINE__, filePath);
    printf ("\n\n");
    exit (1);
}

while ((fgets(line, MAX_CHAR_PER_LINE, filePath) != NULL)) {
...
4

2 に答える 2

3

achar*と a はどちらもFILE*メモリ アドレスを格納するだけです。C の型付けはかなり弱いため (編集: これは私の誤解でした。以下のコメントを参照してください)、ポインターが指す型を気にせずにポインターを割り当てることができます。

fopenオブジェクトのアドレスを返し、FILEそのアドレスをどこかに保存します(あなたの場合は a にありますchar*)。アドレスを使用すると、オブジェクトfgetsのアドレスがまだ保持されているため、すべてが期待どおりに機能します。FILE

于 2013-08-09T19:00:56.257 に答える