Неверная строка символов частично распознана?C ++ - PullRequest
0 голосов
/ 19 августа 2010

BLUF: в этой функции \ 'запрашивает сообщение об ошибке, но не \ ?, Почему?

char key[] = "\a\b\f\n\r\t\v\\\'\"#%&*;:<>\?/{|}~";
        if (strpbrk(*local_str, key) != NULL )
        {
            vico_param_out->out_valid = false;
            AfxMessageBox("L'identifiant de numérisation est invalide. Vous avez saisi des caractères qui ne peuvent pas faire partie d'un nom de fichier windows (\"#%&*;:<>\?\\/{|}~). Veuillez faire les corrections nécessaires.");
        }

Этот фрагмент кода должен проверять, присутствует ли один из недопустимых символов в строке ввода(* local_str).Хорошо работает с некоторыми из них, но если некоторые символы, такие как \?находятся в * local_str.он принимает его и не показывает сообщение об ошибке.Я не t understand what s происходит.

Пример: ABC действителен
AB 'недействителен, запрос на исправление
AB?недействителен, но проваливается через
A '?не действует, но также проваливается.

Пожалуйста, помогите.Я в восторге от этого сообщества.

РЕДАКТИРОВАТЬ: Проблема решена.Казалось бы, эта функция работает, но еще один процесс, о котором я не знал, - это перехватывать ключи в local_str в виде ярлыков перед вызовом моей функции, что объясняет странное поведение.Я переместил свою функцию для оценки при вводе каждого нажатия клавиши.

Мои самые глубокие извинения за досаду.Спасибо вам всем.

Ответы [ 3 ]

0 голосов
/ 19 августа 2010

Простая программа, вызывающая strpbrk с заданным вами значением, не создает проблемы. Попробуйте изменить значение на char const key[], чтобы увидеть, изменяется ли key между использованиями.

0 голосов
/ 20 августа 2010

Мои извинения. Код работает хорошо в конце концов. Другой процесс перехватывал local_str до того, как мой код был выполнен, генерировал исключение без вывода сообщений и пропускал всю мою функцию вместе.

Я перенес свой код для выполнения до указанного процесса, и он должен быть исправлен завтра утром.

0 голосов
/ 19 августа 2010

При выполнении этого кода все три недопустимые строки выдают сообщение об ошибке.

int _tmain(int argc, _TCHAR* argv[])
{
    char local_str[] = "A'?";
    char key[] = "\a \b \f \n \r \t \v \\ \? \' \" \" # % & * ; : < > \? \\ \' / { | } ~  "; 
        if (strpbrk(local_str, key) != NULL ) 
        { 
            cout << ("L'identifiant ......"); 
        } 

    return 0;
}

Я могу только предположить, что может быть некоторое несоответствие между наборами символов US-en и FR-fr.

...