Cのユニークなvoid関数を使用して、ファイルとstdinストリームを読み取る方法を探しています。私はこの機能を使用しようとしています:
#define ENTER 10 //'\n' ASCII code
........
void read(FILE *stream, char *string) {
char c;
int counter = 0;
do {
c = fgetc(stream);
string = realloc(string, (counter+1) * sizeof(char));
string[counter++] = c;
} while(c != ENTER && !feof(stream));
string[counter-1] = '\0';
}
ただし、標準入力ストリームでのみ機能します。テキスト ファイルを使用している場合、ファイルの内容は関数の外では見えません。私はこの関数を次のように呼び出しています:
read(stdin, inputString);
read(inputFile, fileContent);
最初のケースでのみ正しく機能します。
PS: 最初に、inputString と fileContent は次のように宣言されています。
char *inputString = malloc(sizeof(char));
char *fileContent = malloc(sizeof(char));
fgetcがintを返し、char ごとの再割り当てが高価であり (ただし、必要なメモリのみを使用する必要があります)、EOF または '\n' が文字列に格納されます (ただし、後で 0 ターミネータに置き換えられます) 。