0

const charポインタについて混乱しています。

コードは次のとおりです。

int main()
{
    const char map[12][24];
    char fileName[] = "map1.txt";
    const char * mPtr;
    mPtr = map;


    printf( "%d %d \n", mPtr, map );

    load_map( fileName, map );

    printf( "%d %d \n", mPtr, map );


    return 0;
}

load_map()関数コードは次のとおりです。

bool load_map( char * fileName, char * map )
{
    FILE * fptr;
    char c;
    int count = 0;

    fptr = fopen( fileName, "r" );

    if( fptr == NULL ) {
        printf( "Fail to read map \n" );
        return false;
    }

    do {

        c = fgetc( fptr );
        *( map + count++ ) = c;
        if ( count % 23 == 0 ) continue;
        *( map + count++ ) = ' ';


    } while( c != EOF );

    fclose( fptr );
}

私の質問はいつ実行するかです

mPtr = map;

そして、それらはまったく同じメモリアドレスを持ちますが、load_map()関数が実行され た後、mptrの値が変更されました。

しかし、その関数では、私は参照しませんmptr。何が起こっている?

4

4 に答える 4

1

mapの配列の境界を超えて書き込むため、境界外に書き込むデータがmPtr変数にあふれてしまう可能性が最も高いです。

また、関数map内の変数mainは配列の配列として宣言されていますが、 (または 1 次元配列) でload_mapあることが期待されます。char *エラーまたは少なくともこれに関する警告が表示されなかったとしたら、私は驚かれることでしょう。

于 2013-08-22T08:35:03.633 に答える