Я пытаюсь сравнить имя файла со списком строк, чтобы увидеть, совпадают ли они, и если да, то вернуть соответственно
Я использую следующее условие:
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 *)
Вопрос в том, что означает ошибка выше и как ее можно исправить?
Проблема, которую вы получили, проистекает из того факта, что strstr
функция ожидает увидеть два char
указатели (char *
) в качестве аргументов, но он получает WCHAR
массив вместо первого аргумента.
В отличие от обычного 8-битного символа, 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;
}
Хороший так ответ об использовании find
метод в std::wsting
: Найти метод в std :: wstring.
Подробнее о конвертации string
в wstring
: Mijalko: конвертировать std :: string в std :: wstring.
Пожалуйста, оставьте отзыв в комментариях, если это не поможет.
Других решений пока нет …