部分识别的字符串无效? C ++

时间:2010-08-18 20:03:20

标签: c++ sanitization escaping invalid-characters

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.");
        }

这段代码应该检查输入字符串中是否有一个无效的caracters(* local_str)。适用于其中一些,但如果有些人物喜欢\?在* local_str中。它接受它并且不显示错误消息。我没有t understand what发生。

实施例: ABC有效 AB'无效,提示校正信息 AB?是无效但是通过了 一个'?是无效的,但也会失败。

请帮忙。我对这个社区不感兴趣。

编辑:问题解决了。我觉得这个函数可以正常工作,但我不知道的另一个过程是在调用我的函数之前将local_str中的键作为快捷键捕获,因此这是一种奇怪的行为。每次按键输入时,我都会移动我的功能进行评估。

我最烦恼的道歉。 谢谢大家。

3 个答案:

答案 0 :(得分:0)

运行此代码,所有三个无效字符串都会产生错误消息。

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字符集之间可能存在一些不匹配。

答案 1 :(得分:0)

使用您给定的输入调用strpbrk的简单程序不会产生问题。请尝试更改为char const key[]以查看是否在使用之间修改了key

答案 2 :(得分:0)

道歉。代码工作正常。另一个进程是在我的代码执行之前拦截local_str并抛出一个无声异常并一起跳过我的函数。

我移动了我的代码,以便在该流程之前执行,并且应该在明天早上修复。