2

ファイルの内容全体を読み取って印刷したいのですが、セグメント違反が発生し、コードの何が問題なのかわかりません...

#include <stdio.h>
#include <stdlib.h>
int main()
{
    FILE * file;
    long fsize;
    file = fopen("./input.txt","r");
    if(file != NULL){

        //get file size
        fseek(file,0,SEEK_END);
        fsize = ftell(file);
        rewind(file);

        // print
        char * file_content;
        fgets(file_content,fsize,file);
        puts(file_content);
    }
    else{
        printf("open failure\n");
    }
    fclose(file);

    return 0;
}
4

3 に答える 3

4

fgets( )に渡すポインタは初期化されていませんfile_contentfsize指定されたバイト数 ( ) を格納するのに十分な大きさのメモリ ブロックを指している必要があります。を使用mallocしてメモリを割り当てることができます。

char* file_content = (char*)malloc(fsize);
于 2013-09-09T15:38:28.313 に答える
2

char * file_content は単なるポインタです。文字列を格納するためにメモリを割り当てる必要があります。

char * file_content;
file_content = malloc(fsize);
于 2013-09-09T15:40:36.257 に答える
2

「..しかし、セグメント違反が発生します」

明らかに、初期化されていないものに書き込もうとしているからですfile_content

file_content使用前に割り当てられたメモリ

char * file_content =malloc(fsize);
于 2013-09-09T15:41:08.857 に答える