诡异的fprintf

JXES智能生态系统
博客专家认证
2009-10-27 08:29:41
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
FILE *fp;
fp=fopen("D:\\test.txt","w");
if(!fp)
return 0;
fprintf(fp,"%s","11111111+1111111");
//fprintf(fp,"%s","6252f482+351e7e7");
fprintf(fp,"%s","11111111+351e7e5");
fclose(fp);
}

fprintf(fp,"%s","6252f482+351e7e7");这句注释掉与不注释,test.txt中得到的东西非常之诡异,请问这是为什么呢?
...全文
201 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
C/C++ codeint _tmain(int argc, _TCHAR* argv[])
{
FILE *fp;
fp=fopen("D:\\test.txt","wb+"); //此处以二进制方式读写
if(!fp)
return 0;
char* ss = "6252f482+351e7e5";
fwrite(ss,1,strlen(ss)+1,fp);//fprintf(fp,"%s",ss);
fclose(fp);
}
to danxuezx:感谢你的解答,不过你这样破坏了字符串本来的内容了,+1写入后就会多一个字符在后面了,如果我只要输入这些字符串,有什么办法没有呢?另外这几个字符真的很怪,可能是记事本的BUG,如果我手动在记事本里写6252f482+351e7e5,然后保存后再打开,内容也变了。
ct025028 2009-10-28
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 js_gary 的回复:]
感谢大家的支持,就是在记事本里会出现不同的结果,如果用utraedit,等打开都没有问题。
我也觉得可能是MICROSOFTE的BUG,我在项目中用到这个,有什么办法让它能在记事本显示出来吗?
[/Quote]

这种情况出现的机率很小,可以不用考虑。

如果非要考虑的话:
如果数据量小的话,你可以使用一个MessageBox或对话框显示出来,数据量大的话就不用考虑了,直接用记事本就行了(随着字符个数增多,记事本的判断会更准确)
lkldiy 2009-10-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 ct025028 的回复:]
引用 5 楼 akirya 的回复:
调试了一下发现notepad读入文件的时候使用了IsTextUnicode判断是否unicode字符
而IsTextUnicode对于"11111111+11111116252f482+351e7e711111111+351e7e5" 字符串判断错误。
当成unicode编码的字符串输出了。


应该是和字符集相关,记事本在打开文件的时候会判断文件内容所使用的字集。

类似的情况:

打开记事本输入:移动  保存后再打开后还是移动
打开记事本输入:联通  保存后再打开会发现不联通不在了
[/Quote]

刚试过,确实如此,强人啊~
danxuezx 2009-10-28
  • 打赏
  • 举报
回复
另外您原来代码中如果如下也可以显示:
fprintf(fp,"%s","6252f482+351e7e7 ");//多一个空字符
danxuezx 2009-10-28
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 js_gary 的回复:]
感谢大家的支持,就是在记事本里会出现不同的结果,如果用utraedit,等打开都没有问题。
我也觉得可能是MICROSOFTE的BUG,我在项目中用到这个,有什么办法让它能在记事本显示出来吗?
[/Quote]
有。如下可以显示:
int _tmain(int argc, _TCHAR* argv[])
{
FILE *fp;
fp=fopen("D:\\test.txt","wb+"); //此处以二进制方式读写
if(!fp)
return 0;
char* ss = "6252f482+351e7e5";
fwrite(ss,1,strlen(ss)+1,fp);//fprintf(fp,"%s",ss);
fclose(fp);
}
bobob 2009-10-28
  • 打赏
  • 举报
回复
标题应该改过:诡异的记事本
bragi523 2009-10-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 ct025028 的回复:]
引用 5 楼 akirya 的回复:
调试了一下发现notepad读入文件的时候使用了IsTextUnicode判断是否unicode字符
而IsTextUnicode对于"11111111+11111116252f482+351e7e711111111+351e7e5" 字符串判断错误。
当成unicode编码的字符串输出了。


应该是和字符集相关,记事本在打开文件的时候会判断文件内容所使用的字集。

类似的情况:

打开记事本输入:移动  保存后再打开后还是移动
打开记事本输入:联通  保存后再打开会发现不联通不在了
[/Quote]
哈哈
这个试过
  • 打赏
  • 举报
回复
感谢大家的支持,就是在记事本里会出现不同的结果,如果用utraedit,等打开都没有问题。
我也觉得可能是MICROSOFTE的BUG,我在项目中用到这个,有什么办法让它能在记事本显示出来吗?
jamseyang 2009-10-28
  • 打赏
  • 举报
回复
呵呵,以前也看过关于记事本的bug,不过没有和编程联系过
fly4free 2009-10-28
  • 打赏
  • 举报
回复
既然与unicode有关,试试用 unicode 保存所有的内容?
danxuezx 2009-10-27
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 ct025028 的回复:]
引用 5 楼 akirya 的回复:
调试了一下发现notepad读入文件的时候使用了IsTextUnicode判断是否unicode字符
而IsTextUnicode对于"11111111+11111116252f482+351e7e711111111+351e7e5" 字符串判断错误。
当成unicode编码的字符串输出了。


应该是和字符集相关,记事本在打开文件的时候会判断文件内容所使用的字集。

类似的情况:

打开记事本输入:移动  保存后再打开后还是移动
打开记事本输入:联通  保存后再打开会发现不联通不在了
[/Quote]
您也不是一般人,这都被您发现了。
ct025028 2009-10-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 akirya 的回复:]
调试了一下发现notepad读入文件的时候使用了IsTextUnicode判断是否unicode字符
而IsTextUnicode对于"11111111+11111116252f482+351e7e711111111+351e7e5" 字符串判断错误。
当成unicode编码的字符串输出了。
[/Quote]

应该是和字符集相关,记事本在打开文件的时候会判断文件内容所使用的字集。

类似的情况:

打开记事本输入:移动 保存后再打开后还是移动
打开记事本输入:联通 保存后再打开会发现不联通不在了
  • 打赏
  • 举报
回复
调试了一下发现notepad读入文件的时候使用了IsTextUnicode判断是否unicode字符
而IsTextUnicode对于"11111111+11111116252f482+351e7e711111111+351e7e5" 字符串判断错误。
当成unicode编码的字符串输出了。
wltg2001 2009-10-27
  • 打赏
  • 举报
回复
我能看到东西,不过是很怪的字符,不过用别的软件就可以了.可能是记事本本身的问题.
danxuezx 2009-10-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 liumenghappy 的回复:]
有多诡异,贴出来看看
[/Quote]
我也试了下,fprintf(fp,"%s","6252f482+35"); 还正常
当fprintf(fp,"%s","6252f482+351"); 后打开txt就看不到东西了。
liumenghappy 2009-10-27
  • 打赏
  • 举报
回复
有多诡异,贴出来看看
  • 打赏
  • 举报
回复
这个应该是记事本的Bug
我用其他编辑器打开正常

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧