转换为LPCTSTR时出现文件复制问题

时间:2010-03-29 12:32:40

标签: c++ mfc visual-c++

// Convert to a wchar_t*

size_t origsize = strlen(toChar) + 1;

const size_t newsize = 100;

size_t convertedChars = 0;

wchar_t wcstring[newsize];

mbstowcs_s(&convertedChars, wcstring, origsize, toChar, _TRUNCATE);

wcscat_s(wcstring, L"\\*.*\0");

wcout << wcstring << endl; // C:\Documents and Settings\softnotions\Desktop\Release\*.*



SHFILEOPSTRUCT sf;

memset(&sf,0,sizeof(sf));

sf.hwnd = 0;

sf.wFunc = FO_COPY;

//sf.pFrom =wcstring;  /* when giving wcstring i am not getting answer */

 sf.pFrom = L"C:\\Documents and Settings\\softnotions\\Desktop\\Release\\*.*\0";

   wcout << sf.pFrom  <<endl;   // C:\Documents and Settings\softnotions\Desktop\Release\*.*

wcstringsf.pFrom都相同,那么为什么在分配sf.pFrom =wcstring;

时无法得到答案

1 个答案:

答案 0 :(得分:1)

SHFILEOPSTRUCT要求pFrompTodouble-null-terminated strings

您分配给pFrom的字符串文字具有嵌入式\0,因此该字符串是双空终止的。

当您调用wcscat_s时,嵌入的\0被解释为要追加的字符串的结尾,因此生成的字符串不会以双空终止。

正如您在评论中所说,您可以这样做(尽管您需要的功能是wcslen):

wcscat_s(wcstring, L"\\*.*");
wcstring[wcslen(wcstring) + 1] = 0;