我正在寻找一种使用C中独特的void函数读取文件和标准输入流的方法。我正在尝试使用此功能:
#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 重新分配的 char 很昂贵(但我只需要使用必要的内存)并且 EOF 或 '\n' 存储在字符串中(但之后被 0 终止符替换)。