0

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发生。

示例:ABC 有效
AB' 无效,提示信息更正
AB?无效但通过
A'?无效,但也失败了。

请帮忙。我很适应这个社区。

编辑:问题解决了。我似乎这个函数有效,但我不知道的另一个过程是在调用我的函数之前将 local_str 中的键作为快捷方式捕获,因此出现了奇怪的行为。当输入每次击键时,我移动了要评估的函数。

对您的打扰表示最深切的歉意。谢谢大家。

4

3 回答 3

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

于 2010-08-18T20:16:46.417 回答
0

我很抱歉。代码毕竟工作正常。另一个进程在我的代码执行之前拦截 local_str 并抛出一个静默异常并一起跳过我的函数。

我将我的代码移动到在该过程之前执行,它应该在明天早上修复。

于 2010-08-19T21:37:50.430 回答
0

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

于 2010-08-18T20:19:13.453 回答