// 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;时却没有得到答案

最佳答案

SHFILEOPSTRUCT要求pFrompTodouble-null-terminated strings

您分配给pFrom的字符串文字具有嵌入的\0,因此该字符串以双null结尾。

当您调用wcscat_s时,嵌入的\0被解释为要附加的字符串的末尾,因此生成的字符串不是以双null结尾的。

正如您在评论中所说,您可以执行此操作(尽管您需要的功能是wcslen):

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

08-26 18:17