0

我正在尝试将文件名与字符串列表进行比较,以查看它们是否匹配,如果匹配则相应返回

我正在使用以下条件:

if (strstr(file, str) != NULL) {
    return 1;
}

虽然 MSVC++2012 提示我以下错误strstr

Error: no instance of overloaded function "strstr" matches the argument list
argument types are: (WCHAR [260], char *)

问题是:上面的错误是什么意思,如何解决?

4

1 回答 1

0

您遇到的问题来自这样一个事实:该strstr函数希望将两个char指针 ( char *) 作为其参数,但它接收WCHAR数组而不是作为第一个参数。

与通常的 8 位 char 不同,它WCHAR表示 16 位 Unicode 字符。

修复错误的一种方法是将 Unicode 文件名转换为 char 数组,如下所示:

char cfile[260];
char DefChar = ' ';
WideCharToMultiByte(CP_ACP, 0, file, -1, cfile, 260, &DefChar, NULL);

然后使用cfile代替file.

但是这种方法只适用于 ASCII 字符。

因此,您可以考虑使用另一种适合WCHAR字符串 ( wstring) 的字符串比较方法。

以下代码可能会帮助您使用第二种方法:

// Initialize the wstring for file
std::wstring wsfile (file);    

// Initialize the string for str
std::string sstr(str);

// Initialize the wstring for str
std::wstring wstr(sstr.begin(), sstr.end());

// Try to find the wstr in the wsfile
int index = wsfile.find(wstr); 

// Check if something was found
if(index != wstring::npos) {
    return 1;
}

关于在 std :: wstringfind中使用方法的好答案。std::wsting

更多关于转换stringwstringMijalko:将 std::string 转换为 std::wstring

如果没有帮助,请在评论中留下一些反馈。

于 2014-03-12T00:50:47.447 回答