我在wchar_t*
到char*
转化时遇到问题。
我从wchar_t*
结构中获取FILE_NOTIFY_INFORMATION
字符串,由ReadDirectoryChangesW
WinAPI函数返回,因此我认为该字符串是正确的。
假设wchar字符串是" New Text File.txt" 在Visual Studio调试器中将鼠标悬停在节目中的变量" N"和一些未知的中文字母。虽然在手表中正确表示了字符串。
当我尝试使用wcstombs
wcstombs(pfileName, pwfileName, fileInfo.FileNameLength);
它只会将两个字母转换为char*
(" Ne"),然后生成错误。
在此块的函数_wcstombs_l_helper()中wcstombs.c中的一些内部错误:
if (*pwcs > 255) /* validate high byte */
{
errno = EILSEQ;
return (size_t)-1; /* error */
}
它不会被视为异常。
可能是什么问题?
答案 0 :(得分:0)
我的猜测是你传递的宽字符串无效或定义不正确。
pwFileName
如何定义?您似乎将FILE_NOTIFY_INFORMATION
结构定义为fileInfo
,那么为什么不使用fileInfo.FileName
,如下所示?
wcstombs(pfileName, fileInfo.FileName, fileInfo.FileNameLength);
答案 1 :(得分:0)
你得到的错误说明了一切,它找到了一个无法转换为MB的字符(因为它在MB中没有任何表示),source:
如果wcstombs遇到宽字符,则无法转换为 多字节字符,它返回-1强制转换为类型size_t并设置errno 到EILSEQ
在这种情况下,你应该避免“假设”输入,并给出一个失败的实际测试用例。