gpt4 book ai didi

c - fwrite() 和文件损坏

转载 作者:行者123 更新时间:2023-11-30 21:04:32 26 4
gpt4 key购买 nike

我正在尝试将 wchar 数组写入 C 中的文件,但是存在某种损坏和不相关的数据,例如这样的变量和路径

c.:.\.p.r.o.g.r.a.m. .f.i.l.e.s.\.m.i.c.r.o.s.o.f.t. .v.i.s.u.a.l. .s.t.u.d.i.o. 1.0...0.\.v.c.\.i.n.c.l.u.d.e.\.x.s.t.r.i.n.g..l.i.s.t...i.n.s.e.r.t 

与正确的数据一起写入文件 ( example ) 我已确认缓冲区以 null 终止并包含正确的数据。

这是我的代码:

        myfile = fopen("logs.txt","ab+");
fseek(myfile,0,SEEK_END);
long int size = ftell(myfile);
fseek(myfile,0,SEEK_SET);
if (size == 0)
{
wchar_t bom_mark = 0xFFFE;
size_t written = fwrite(&bom_mark,sizeof(wchar_t),1,myfile);
}
// in another func
while (true)
{
[..]
unsigned char Temp[512];
iBytesRcvd = recv(sclient_socket,(char*)&Temp,iSize,NULL);
if(iBytesRcvd > 0 )
{
WCHAR* unicode_recv = (WCHAR*)&Temp;
fwrite(unicode_recv,sizeof(WCHAR),wcslen(unicode_recv),myfile);
fflush(myfile);
}
[..]
}

这可能是什么原因造成的?

最佳答案

recv() 不会以空终止 &Temp,因此 wcslen() 会运行 recv( 实际写入的字节)。如果您仅使用 iBytesReceived 作为 fwrite() 的字节计数而不是使用 wcslen() 并希望收到的数据是,您将获得正确的结果正确的空终止(即宽空终止):

fwrite(unicode_recv, 1, iBytesReceived, myfile);

关于c - fwrite() 和文件损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10164267/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com