WCSLEN无法正常工作

时间:2014-03-13 18:24:17

标签: visual-c++-2008 tchar

我有一些代码

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 :(得分:0)

因为wcslen告诉您有多少个字符有些内容,而WriteFile字节TCHAR是多个字节(或两个字节)。所以,你已经要求WriteFile写下你传递给它的字符串中的一半字符。

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