我有一个file.txt,它包含,例如,“这是一个txt文件”(这个内容可以是变量),我需要一个读取file.txt并将其内容保存到char *的函数。 / p>
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的内容多。
非常感谢。
答案 0 :(得分:1)
我遇到的问题是
char *readedContent
我的内容比file.txt
内容多。
您获得的字节数超出文件中字符数的最可能原因是文件的encoding:fread()
逐字节读取文件,因此如果文件的编码使用多个对于某些代码点,您的缓冲区将包含一个或多个字符的多个字节。
要验证此理论并解决问题,请编写一个简短的程序,使用fwrite()
API将预期消息的字节"This is a .txt file"
写入文本文件。以这种方式编写的文件应该使用fread()
正确读取。
答案 1 :(得分:0)
尝试
fseek(f2, 0L, SEEK_END);
long tmpSize = ftell(f2);
fseek(f2, 0L, SEEK_SET);
而不是rewind(f2)
在fread之后移动readedContent[len] = '\0';
答案 2 :(得分:-1)
#include<stdio.h>
#include<stdlib.h>
int main()
{
char *str = "this is my file";
FILE *f1;
f1 = fopen("file.txt","w");
fprintf(f1,"%s",str);
fclose(f1);
//string written in file.txt
size_t len, bytesRead;
char *readedContent;
FILE* f2;
f2 = fopen("file.txt", "rb");
fseek(f2, 0, SEEK_END);
len = ftell(f2);
//will need it for length
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);
//fread will read it from file and
//readed content will be pointed by readedContent pointer
printf("STRING: %s\n", readedContent);
printf("the size is %zd\n",bytesRead);
fclose(f2);
return 1;
}
Linux输出
STRING: this is my file
`the size is 15`
在linux上正常工作