【发布时间】:2013-05-08 16:49:02
【问题描述】:
我有一个包含的 file.txt,例如,“这是一个 txt 文件”(此内容可以是可变的),我需要一个读取 file.txt 并将其内容保存到 char* 中的函数。
file.txt 包含 -> “这是一个 .txt 文件”
我需要一个包含“这是一个 .txt 文件”的 char *readedContent。
首先,我将 char *str(str 包含“这是一个 .txt 文件”)的内容保存到“file.txt”中,然后我尝试从该文件中获取字符串,但字符串有更多字符而不是“这是一个 .txt 文件”。 (经常添加空格或@,?)
我的功能是:
char *special_char_remplace(char *str){
FILE *f1;
f1 = fopen("file.txt","w+");
fprintf(f1,"%s", str);
fclose(f1);
size_t len, bytesRead;
char *readedContent;
FILE* f2;
f2 = fopen("file.txt", "rb");
fseek(f2, 0, SEEK_END);
len = ftell(f2);
rewind(f2);
readedContent = (char*) malloc(sizeof(char) * len + 1);
readedContent[len] = '\0'; // Is needed only for printing to stdout with printf
bytesRead = fread(readedContent, sizeof(char), len, f2);
printf("STRING: %s\n", readedContent);
fclose(f2);
return readedContent;
}
我遇到的问题是在 char *readedContent 中我的字符比 file.txt 的内容多。
非常感谢。
【问题讨论】:
-
要阅读文本内容,您可以使用
fopen("file.txt", "rt"); -
您能否举一个文件内容与您的程序读取的
readedContent的示例? -
您在 Windows 上吗?您是否遇到了 ^Z (control-Z) 标记文件末尾的问题,但之后有多达 255 个额外字节才能到达块的末尾?如果您使用
"r"或"rt"模式打开文件会发生什么? -
您最好将
fread更改为fread(readedContent, len, 1, f2)以避免bytesRead小于len的可能性。不过,这不会导致您描述的问题。 -
@EAGER_STUDENT 不太正确,“rt”正在为您的数据添加一些额外的内容(例如取决于操作系统的新行),而不是对文件内容进行精确的字节复制