2010-08-18 61 views
0

BLUF:在這個函數中,'提示錯誤信息但不是',爲什麼?部分識別的字符串無效? C++

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有效,提示mesage?無效,但通過
A'?是無效的,但也落空了。

請幫忙。我拒絕了這個社區。

編輯:問題解決了。我覺得這個函數可以工作,但另一個我不知道的過程是在調用函數之前捕獲local_str中的鍵作爲快捷鍵,因此出現了奇怪的行爲。當我輸入每個按鍵時,我移動了我的函數進行評估。

對於煩惱我深表歉意。 謝謝大家。

+0

爲什麼鍵有重複的項目?你有\\,\\,\\和\「列出兩次 – 2010-08-18 20:09:26

+1

local_str被定義爲'char **'嗎? – 2010-08-18 20:10:06

+0

你有意拒絕空格字符嗎? – Potatoswatter 2010-08-18 20:11:18

回答

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字符集之間可能會有一些不匹配。

+0

美國和FR - fr(將p recise,LCID 0409和040C)都是ASCII的超集,並且在這裏應該具有相同的功能。 – MSalters 2010-08-19 07:56:16

+0

我正在使用FR-ca進行準備,但我認爲這不會導致任何問題。 – Mashuu 2010-08-19 14:35:43

0

一個簡單的程序調用strpbrk與您給定的輸入不會產生問題。嘗試更改爲char const key[]以查看key是否在使用中發生了修改。

+0

試過了,沒有變化。 – Mashuu 2010-08-19 14:33:34

0

我的歉意。代碼運行良好。另一個過程是在我的代碼執行之前攔截local_str,並拋出一個無聲的異常並一起跳過我的函數。

我在我的代碼之前移動了我的代碼,並且應該在明天早上修復它。