1. ホーム
  2. c

[解決済み] C 言語でテキストファイル全体を char 配列に読み込む

2022-02-17 10:41:08

質問内容

C言語でテキストファイルの内容をchar配列に読み込みたい。改行は必須。

どうすれば実現できるのでしょうか?ウェブでC++の解決策はいくつか見つけましたが、Cだけの解決策はありません。

編集:現在、以下のようなコードになっています。

void *loadfile(char *file, int *size)
{
    FILE *fp;
    long lSize;
    char *buffer;

    fp = fopen ( file , "rb" );
    if( !fp ) perror(file),exit(1);

    fseek( fp , 0L , SEEK_END);
    lSize = ftell( fp );
    rewind( fp );

    /* allocate memory for entire content */
    buffer = calloc( 1, lSize+1 );
    if( !buffer ) fclose(fp),fputs("memory alloc fails",stderr),exit(1);

    /* copy the file into the buffer */
    if( 1!=fread( buffer , lSize, 1 , fp) )
      fclose(fp),free(buffer),fputs("entire read fails",stderr),exit(1);

    /* do your work here, buffer is a string contains the whole text */
    size = (int *)lSize;
    fclose(fp);
    return buffer;
}

警告: 代入はキャストせずに整数からポインタを作成します。これは次の行にあります。 size = (int)lSize; . アプリを実行すると、セグメンテーションが発生します。

更新してください。 上記のコードが動作するようになりました。セグフォールトの場所を特定したので、別の質問を投稿しました。助けてくれてありがとうございます。

解決方法を教えてください。

FILE *fp;
long lSize;
char *buffer;

fp = fopen ( "blah.txt" , "rb" );
if( !fp ) perror("blah.txt"),exit(1);

fseek( fp , 0L , SEEK_END);
lSize = ftell( fp );
rewind( fp );

/* allocate memory for entire content */
buffer = calloc( 1, lSize+1 );
if( !buffer ) fclose(fp),fputs("memory alloc fails",stderr),exit(1);

/* copy the file into the buffer */
if( 1!=fread( buffer , lSize, 1 , fp) )
  fclose(fp),free(buffer),fputs("entire read fails",stderr),exit(1);

/* do your work here, buffer is a string contains the whole text */

fclose(fp);
free(buffer);