0

私はここで何が起こるかについてかなり混乱しています。

while ( (ent = readdir(dir)) != NULL)
    {
        char *name = ent -> d_name;
        ....
    }

これは、ディレクトリをスキャンするための基本的なコードです。けっこうだ。しかし、これがどのようにコンパイルされるのか理解できません。なぜなら、コンパイラは ent -> d_name のサイズをどのように決定できるのでしょうか? コンパイル時には誰もそれを知りません。そのためにメモリを割り当てる必要があります。コンパイラはこれを自動的に malloc() していますか、それとも何ですか? 関連する場合、UbuntuでGCCを使用しています。

前もって感謝します。

4

2 に答える 2

1

たぶん私は明らかなことを見逃していますが、もしnameが でchar *ありent->d_nameが である場合char *(正しい入力のためにあるはずです)、確かに起こっていることは、char( name) のブロックへの1つのポインターが同じブロックを指すように設定されていることですchar別のポインター ( ent->d_name) が指している。

メモリの割り当てが行われていないように思えます。

于 2013-06-30T08:04:59.940 に答える