98

ファイルの内容全体をバッファに書き込みたい。ファイルには実際には、文字列と比較する必要がある文字列のみが含まれています。

Linuxでも移植可能な最も効率的なオプションは何でしょうか。

ENV: Windows

4

3 に答える 3

193

Linux と Windows の間の移植性は大きな頭痛の種です。Linux は一般に C 用の適切で高品質なツールチェーンを備えた POSIX 準拠のシステムであるのに対し、Windows は C 標準ライブラリで多くの関数を提供していません。

ただし、標準に固執したい場合は、次のように記述できます。

#include <stdio.h>
#include <stdlib.h>

FILE *f = fopen("textfile.txt", "rb");
fseek(f, 0, SEEK_END);
long fsize = ftell(f);
fseek(f, 0, SEEK_SET);  /* same as rewind(f); */

char *string = malloc(fsize + 1);
fread(string, fsize, 1, f);
fclose(f);

string[fsize] = 0;

ここstringには、適切に 0 で終了する C 文字列としてテキスト ファイルの内容が含まれます。このコードは単なる標準 C であり、POSIX 固有ではありません (ただし、Windows で動作/コンパイルすることを保証するものではありません...)。

于 2012-12-22T12:51:41.427 に答える
-2

ポータブル ソリューションでは、 を使用できますgetc

#include <stdio.h>

char buffer[MAX_FILE_SIZE];
size_t i;

for (i = 0; i < MAX_FILE_SIZE; ++i)
{
    int c = getc(fp);

    if (c == EOF)
    {
        buffer[i] = 0x00;
        break;
    }

    buffer[i] = c;
}

マクロを使用したくない場合、MAX_FILE_SIZEまたはマクロが大きい場合 (大きすぎbufferてスタックに収まらない場合) は、動的割り当てを使用します。

于 2012-12-22T12:50:08.690 に答える