用CFile::Write写文件,怎么才能让没写满的内存中的数据为“00”呢?

ahytufc 2009-06-16 10:57:14
如:
CString s = "FilLog";

CFile f(.....);
f.Write(s.AllocSysString(), 32);
d.Close();

我想让写出来的东西在内存中为:
46 00 69 00 6C 00 4C 00 6F 00 67 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
而实际上生成的东西在倒数第2位和倒数第4位总有随机出现的数据,
如何才能把没满的内存空间里的数据都为00呢?
...全文
94 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
killbug2004 2009-06-16
  • 打赏
  • 举报
回复
我的代码是有问题的,UNICODE版本,strcpy_S复制字符串会出问题

建议用cpio的代码
DavidHsing 2009-06-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 killbug2004 的回复:]
CString s = "FilLog";

CFile f(.....);
char *lpBuffer = new char[32];
ZeroMemory(lpBuffer, 32);
strcpy_s(lpBuffer, 32, (char*)ff.GetBuffer());
f.Write(lpBuffer,32);
delete [] lpBuffer;
s.Close();
[/Quote]

对的。
lz 看这里加粗的。
ZeroMemory
很重要!

ps: 微软已经建议用 SecureZeroMemory 代替 ZeroMemory 了。
ahytufc 2009-06-16
  • 打赏
  • 举报
回复
直接memset(...64);为零再往里写行吗?
ahytufc 2009-06-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 killbug2004 的回复:]
CString s = "FilLog";

CFile f(.....);
char *lpBuffer = new char[32];
ZeroMemory(lpBuffer, 32);
strcpy_s(lpBuffer, 32, (char*)ff.GetBuffer());
f.Write(lpBuffer,32);
delete [] lpBuffer;
s.Close();
[/Quote]

那我要是想写多个,"FilLog"写完之后,紧接着再写个,那是不是有点麻烦了??
cpio 2009-06-16
  • 打赏
  • 举报
回复
CString s = "FilLog";
char buff[32] = {0};//全部初始化为0
memcpy(buff, (LPCSTR)s, s.GetLength());
CFile f(.....);
f.Write(buff, 32);
d.Close();
ahytufc 2009-06-16
  • 打赏
  • 举报
回复
没人告诉我吗??
有告诉的吗?
立马结帖给分!
killbug2004 2009-06-16
  • 打赏
  • 举报
回复
CString s = "FilLog";

CFile f(.....);
char *lpBuffer = new char[32];
ZeroMemory(lpBuffer, 32);
strcpy_s(lpBuffer, 32, (char*)ff.GetBuffer());
f.Write(lpBuffer,32);
delete [] lpBuffer;
s.Close();



ahytufc 2009-06-16
  • 打赏
  • 举报
回复
剩下的长度全部写0?
怎么写0??
fengrx 2009-06-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jtujtujtu 的回复:]
那是因为你读取的内存超出了长度
所以读到了其他的内存区域

可以直接读取 s 的长度 s.GetLength()
然后不足的部分自己补零

[/Quote]
.
na_he 2009-06-16
  • 打赏
  • 举报
回复
写出来的数据和原数据的长度比较一下了,如果大于就是多写了,就要按照上面各位写的方法来纠正了
jtujtujtu 2009-06-16
  • 打赏
  • 举报
回复
那是因为你读取的内存超出了长度
所以读到了其他的内存区域

可以直接读取 s 的长度 s.GetLength()
然后不足的部分自己补零
w29468 2009-06-16
  • 打赏
  • 举报
回复
[Quote=引用楼主 ahytufc 的帖子:]
CFile f(.....);
f.Write(s.AllocSysString(), 32);
f.Close();
[/Quote]

先只写s长度的内容,再把剩下的长度全部写0
ahytufc 2009-06-16
  • 打赏
  • 举报
回复
d.Close(); 写错了,f.Close();

16,551

社区成员

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

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

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