2

文字列配列があり、文字列を配列にコピーしたい。プログラムが動作を停止するまでは動作しますが、文字列のコピーに問題があることはわかっています。行をコピーしてコメントすると、プログラムは正常に動作するためです。これが私のコードです:

FILE *fsource = fopen(source, "rb");
char fname[256], **files, mybuf[BUFSIZ];
files = allocate2d(files, count_files);

clear(fname);

reading = fread(mybuf, 1, BUFSIZ, fsource);
while(reading)
{
    for(i = 0; i < reading; i++)
    {
       if(mybuf[i] == 20)
       {
          while(1)
            {
                if(i < reading)
                {
                    if(mybuf[i] == 0)
                    {
                        clear(files[ifiles]);
                        strcat(files[ifiles++], fname); // here is problem :(
                        //append_string(files[ifiles++], fname); // also doesn't work

                        clear(fname);
                        break;
                    }

                    append_char(fname, mybuf[i++]);
                }
                else
                {
                    break;
                }
            }
       }

       clear(fname);
    }

    reading = fread(mybuf, 1, BUFSIZ, fsource);
}

char** allocate2d(char **arr, unsigned int size)
{
    unsigned int i = 0;
    arr = malloc(size * sizeof(char));

    for(i = 0; i < size; i++)
    {
        arr[i] = malloc(256);
    }

return arr;
}
4

2 に答える 2

1

allocate2d

arr = malloc(size * sizeof(char));

する必要があります

arr = malloc(size * sizeof(char*));

sizeポインターにスペースを割り当てたいためです。

また

arr[i] = malloc(256);

あるべき

arr[i] = calloc(256, sizeof(char));

strcatが0 文字を検出するようにします。(注:sizeof(char)は 1 の別の書き方です。)

于 2013-01-05T22:04:40.253 に答える
1

で割り当てを修正する必要がありますallocate2d()。ポインタの配列を割り当てたい場合

arr = malloc(size * sizeof(char*));
于 2013-01-05T22:04:48.577 に答える