ファイルの内容全体をバッファに書き込みたい。ファイルには実際には、文字列と比較する必要がある文字列のみが含まれています。
Linuxでも移植可能な最も効率的なオプションは何でしょうか。
ENV: Windows
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 で動作/コンパイルすることを保証するものではありません...)。
ポータブル ソリューションでは、 を使用できます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
てスタックに収まらない場合) は、動的割り当てを使用します。