strstr — string.h ошибка недопонимания?

Я пытаюсь сравнить имя файла со списком строк, чтобы увидеть, совпадают ли они, и если да, то вернуть соответственно

Я использую следующее условие:

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 *)

Вопрос в том, что означает ошибка выше и как ее можно исправить?

0

Решение

Проблема, которую вы получили, проистекает из того факта, что 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.

Пожалуйста, оставьте отзыв в комментариях, если это не поможет.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]