2014-03-13 88 views
0

我有一些代码WCSLEN不工作正确

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    HANDLE hFile; 
    DWORD dwRWBytes; 
    TCHAR frmdata1[] = _T("-----------------------------7d82751e2bc0858\r\nContent-Disposition: form-data; name=\"file\"; filename=\"C:\\Windows\\Temp\\hi.exe\"\r\nContent-Type: application/octet-stream\r\n\r\n"); 
    TCHAR frmdata2[] = _T("\r\n-----------------------------7d82751e2bc0858--\r\n"); 
    TCHAR hdrs[] = _T("Content-Type: multipart/form-data; boundary=---------------------------7d82751e2bc0858"); 

    hFile = CreateFile(L"D://log.txt", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); 
    WriteFile(hFile, frmdata1, wcslen(frmdata1), &dwRWBytes, NULL); 
    CloseHandle(hFile); 
    exit(0); 
} 

我不明白为什么在log.txt中只存在串-----------------------------7d82751e2bc0858 Content-Disposition: form-data; name="

有什么问题的一部分?当我试图保存frmdata2时,日志中的字符串也不完整。我该怎么办?我认为在wcslen()函数中存在一些问题。另外,我使用VC 2008

+1

,请复制粘贴代码在这里,而不是提供一个链接 –

回答

0

因为wcslen告诉你东西是长多少字符,WriteFile写道:字节TCHAR是多字节(或两个字节)。因此,您已经要求WriteFile在您传递给它的字符串中写入一半字符。

如果你想要写的所有字符或获取字符串的大小字节,你可以使用wcslen(frmdata1) * sizeof(TCHAR)

+0

哦,不知道这一点。非常感谢你。所以你必须记住TCHAR对于这种类型的所有操作都是两字节长的?我有点困惑。 memcpy操作如何看起来像我需要将frmdata1和frmdata2放在一起? – user3416803

+0

我已经更新了有关计算字节的一些细节的答案 - 您可以使用它来计算WriteFile或memcpy所需的内容。虽然,如果您要复制字符串,“_tcscpy_s”可能比memcpy更好。 –

+0

多数民众赞成它,问题看起来解决,再次感谢你! – user3416803