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

このコード スニペットは、無効な文字の 1 つが入力文字列 (*local_str) に含まれているかどうかを確認することになっています。それらのいくつかでうまく機能しますが、一部の文字が \? *local_str にあります。それを受け入れ、エラー メッセージを表示しません。私はt understand what起こっていません。

例: ABC は有効です
AB' は有効ではありません。修正を促すメッセージが表示されます
AB? は有効ではありませんが、
A' を通過しますか? は有効ではありませんが、失敗します。

助けてください。私はこのコミュニティに深く関わっています。

編集:問題は解決しました。この関数は機能しているように見えますが、私が知らなかった別のプロセスが、関数を呼び出す前に local_str のキーをショートカットとしてキャッチしていたため、奇妙な動作が発生しました。各キーストロークが入力されたときに評価されるように関数を移動しました。

ご迷惑をおかけしましたことを深くお詫び申し上げます。ありがとうございます。

4

3 に答える 3

0

謝罪いたします。結局、コードは正常に機能しています。コードが実行される前に別のプロセスが local_str をインターセプトしていて、サイレント例外をスローし、関数をすべてスキップしました。

そのプロセスの前にコードを実行するように移動しましたが、明日の朝に修正する必要があります。

于 2010-08-19T21:37:50.430 に答える
0

このコードを実行すると、3 つの無効な文字列すべてがエラー メッセージを生成します。

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

与えられた入力で呼び出す単純なプログラムstrpbrkでは、問題は発生しません。を変更しchar const key[]てみて、次の使用までに が変更されているかどうかを確認してくださいkey

于 2010-08-18T20:19:13.453 に答える