//2.txt
errno_t err1;
FILE * pFile1;
err1 = _wfopen_s(&pFile1, _T("2.txt"), _T("w"));
TCHAR ch[3];
ch[0] = _T('a');
ch[1] = 10;//换行,文本写入状态下,把换行(10)->回车(13)+换行(10)
//ch[2] = 10;
ch[2] = _T('b');
fwrite(ch, sizeof(TCHAR), 3, pFile1);
fflush(pFile1);
fclose(pFile1);效果如图,为什么第二行前面有一个空格?

解决方案 »

  1.   

    用UE看下这个文件的十六进制数据,看看是否有多余的内容,然后在Debug模式下设断点,看看写入文件的字符串流的内容的十六进制数据是什么
      

  2.   

    我看孙鑫的视频,文件指针移到开头写,没有覆盖原来的内容,原来的内容接在了写入内容的后面,这是怎么做到的啊?我的代码和他的差不多,就是把“”换成_T("")了,strlen换成wcslen了
      

  3.   

    明明char[1]=10,写入的数据却是0D0A00,我知道文本写入状态会在换行前加个回车,但是为什么不是加成0D000A00呢?另外第二行前面的空格还是不理解
      

  4.   

    你拿这个,和在写入内存时的数据进行比较,看看一样不,
    这个就是写入内存时的数据嘛
    这个是写入完成了的数据,是说在写之前,这些数据肯定已经在内存中了对吧。比如在一个char流里,然后看这个流的内容是什么
      

  5.   

    你拿这个,和在写入内存时的数据进行比较,看看一样不,
    这个就是写入内存时的数据嘛
    这个是写入完成了的数据,是说在写之前,这些数据肯定已经在内存中了对吧。比如在一个char流里,然后看这个流的内容是什么我不知道怎么看它的16进制源码,不把它写出来怎么看啊?
      

  6.   

    推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。不要把
    fopen("...","...");fscanf,fprintf,fgets,fgetc,fclose //读时把\r\n替换成\n,写时把\n替换成\r\n;读到\x1a就设置EOF;读写的内容当字符看待

    fopen("...","...b");fseek,fread,fwrite,fgetc,fclose  //不作以上替换,遇到\x1a仍继续读;读写的内容当字节看待
    弄混了
      

  7.   

    你拿这个,和在写入内存时的数据进行比较,看看一样不,
    这个就是写入内存时的数据嘛
    这个是写入完成了的数据,是说在写之前,这些数据肯定已经在内存中了对吧。比如在一个char流里,然后看这个流的内容是什么我不知道怎么看它的16进制源码,不把它写出来怎么看啊?
    Debug模式下,在写入文件前设置个断点,然后断在那,在调式窗口中有个内存窗口,打开,输入变量名,也就是数据的地址,就能看到他的数据了
      

  8.   

    按Alt+6打开内存窗口,输入&变量名
      

  9.   

    VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。
    对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
    (Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)