2

1 つの長い文字列を含むファイルを読み取り、これを文字列の配列にロードする小さな演習を行っています。これまでのところ、私は持っています:

char* data[11];
char buf[15];
int i = 0;

FILE* indata; 
indata = fopen( "somefile.txt", "r" );
while( i < 11)
{
    fgets(buf, 16, indata);
    data[i] =  buf;
    i++;
}

fclose( indata );

somefile.txt: "aaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbaahhhhhbbbbdddddddddddddbbbbb"

等..

これは 15 文字を読み取り、その文字列を配列に追加し、次の 15 を取得します。問題は、配列が常に最後の文字列と等しいことです。したがって、最後の文字列が "ccccv" の場合、配列全体、data[0] = "ccccv" になります。 、data[1] = "ccccv"、data[2] = "ccccv" など。

なぜこれが起こっているのか、それを行うためのより良い方法があるかどうかを知っている人はいますか? ありがとう

4

1 に答える 1

2

の各ポインタはdata、同じメモリ領域を指しますbufstrcpy+を使用する必要がありますmalloc

また、「マイナーな」バッファ オーバーフローがあるようです。bufサイズは 15 で、16 文字を読んでいます。

于 2012-04-23T17:26:16.577 に答える