首页 > 代码库 > fprintf、fscanf读写乱码的问题

fprintf、fscanf读写乱码的问题

前几天写类linux文件系统的时候,被这个搞死了,今天终于弄懂了

  这是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只是把屏幕上的效果反映到文件里而已