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中的键作为快捷键捕获,因此这是一种奇怪的行为。每次按键输入时,我都会移动我的功能进行评估。我最烦恼的道歉。 谢谢大家。
答案 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并抛出一个无声异常并一起跳过我的函数。
我移动了我的代码,以便在该流程之前执行,并且应该在明天早上修复。