-3

Cのファイルにwchar配列を書き込もうとしていますが、ある種の破損と、変数やパスのような無関係なデータがあります

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 

正しいデータとともにファイルに書き込まれます () バッファーが 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);
                }
            [..]
            }

何が原因でしょうか?

4

1 に答える 1

1

recv()は null で終了&Tempしないため、wcslen()によって実際に書き込まれたバイトを超えて実行されrecv()ます。受信したデータが正しく null で終了する (ワイド NULL で終了する) ことを期待する代わりに、iBytesReceivedバイト カウントとして使用するだけで、正しい結果が得られます。fwrite()wcslen()

fwrite(unicode_recv, 1, iBytesReceived, myfile);
于 2012-04-15T17:26:50.710 に答える