2014-03-13 143 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