首页 > 代码库 > fprintf、fscanf读写乱码的问题
fprintf、fscanf读写乱码的问题
这是cpp文件
#include
#include
#include
#include
using namespace std;
char ch[250];
struct s{
short a, b;
};
int main(){
FILE *file = fopen("test.txt", "wt+");
s st;
st.a = 1, st.b = 2;
fseek(file, 0, 0);
fwrite(&st, sizeof(short), sizeof(st) / sizeof(short), file);
//fseek(file, 0, 0);
//fread(&st, sizeof(short), sizeof(st) / sizeof(short), file);
char temp[256] = "flaf";
int c = 0x11110011;
fseek(file, sizeof(st), 0); //加上这一句结果就不一样了
fprintf(file, "%s", temp);
//fputs(temp, file);
fwrite(&c, sizeof(int), 1, file);
fseek(file, sizeof(st), 0);
//fgets(temp, sizeof(temp), file);
fscanf(file, "%s", temp);
fread(&c, sizeof(int), 1, file);
cout << temp <<" "<< c << endl;
fclose(file);
system("pause");
return 0;
}
先在文件里面写了个结构体,然后写入一个字符串“flat",再写入一个ini型整数c
结果在读取字符串的时候,后面总是跟有乱码,而且整数c也总是有时读得对有时错,就像这样
这里有一个点很关键,可我一直都没意识到,字符串结束符\0其实在fprintf的时候是不会printf出来的,就像你在屏幕上看不到那个\0一样,fprintf只是把屏幕上的效果反映到文件里而已