0

C でファイルをメモリに読み込む関数を作成しましたが、コードに問題があり、文字列の末尾にランダムな文字が表示されるようです。最後に「\ 0」を追加した後でも。ファイル全体が表示され、さらに文字を入れるのに十分なスペースをmallocしていないので、これはまったくわかりません。文字が増えると、何らかのエラーが発生するはずですか? とにかく、誰がこれを引き起こしているのか知っていますか?

char* LoadSourceFile(char* filename)
{
    int fileSize;
    char* buffer;
    struct stat handle;
    FILE* bestand;

    stat(filename, &handle);
    if (fopen_s(&bestand, filename, "r") != 0) {
        return NULL;
    }

    fileSize = handle.st_size;
    handle.st_size++;
    buffer = (char*)malloc(handle.st_size);
    if (buffer == NULL) {
        return buffer;
    }

    fread_s(buffer, handle.st_size, fileSize, 1, bestand);
    buffer[fileSize] = '\0';
    fclose(bestand);

    return buffer;
}
4

3 に答える 3

0

剥がしてください

handle.st_size++;

そして挿入

buffer = (char*)malloc(sizeof(char) * ( handle.st_size + 1 ) );

fread_s(buffer, handle.st_size + 1, 1, handle.st_size, bestand);

それが役に立てば幸い :)

于 2013-02-08T21:41:57.303 に答える
0

これ

fread_s(buffer, handle.st_size, fileSize, 1, bestand);

する必要があります

fread_s(buffer, handle.st_size, 1, fileSize, bestand);

ドキュメントによると、関数fread_sは次のものを受け入れます。

size_t fread_s(void *buffer,size_t bufferSize, size_t elementSize, size_t count, FILE *stream );

buffer: データの保存場所。

bufferSize: 宛先バッファーのサイズ (バイト単位)。

elementSize:読み取る項目のサイズ (バイト単位)。

count: 読み取るアイテムの最大数。

stream: FILE 構造体へのポインタ。

各要素が1 バイトであるべきときに、各要素がバイトであることを意味するelementSizeをに設定します。filesizefilesize

于 2013-02-08T21:32:44.377 に答える
0

バッファに読み込まれたバイト数である fread_s からの戻り値を見てください。予想より少ないかもしれません。

bytes_read = fread_s(buffer, handle.st_size, fileSize, 1, bestand);
buffer[bytes_read] = '\0';

編集:私が言ったことを正しくするには、カウント/サイズパラメーターを交換する必要があります:

bytes_read = fread_s(buffer, handle.st_size, 1, fileSize, bestand);
buffer[bytes_read] = '\0';
于 2013-02-08T21:33:54.533 に答える