ユーザーが4文字以上入力すると、無効なパラメータハンドラを呼び出すために次のコードを使用しました。実際には、ハンドラを呼び出す関数gets_s()
です。gets_s()のような無効なハンドラ関数を呼び出す方法は?
...
char arr[5];
_invalid_parameter_handler newHandler;
newHandler = myInvalidParameterHandler;
_set_invalid_parameter_handler(newHandler);
gets_s(arr,4);
...
}
void myInvalidParameterHandler(const wchar_t* expression,const wchar_t* function,
const wchar_t* file,
unsigned int line,
uintptr_t pReserved)
{
...
}
さて、私の質問はどのようにgets_s(ある)が呼び出されます/内部ハンドラが呼び出されます?私は私のprogram.Forなどで同様の何かをしたいので、私はこれを求めています。
上記のコードを実行しているときに、ユーザーが4つ以上の文字を入力した場合、その後ハンドラは、私は不正なハンドラ関連のコードをコメントアウトinvoked.Ifですその後、私のプログラム:私は
EDIT like-宣言された関数を持って言うことができます私は達成したいと思います。 もし私の機能を使う人がいたら、gets_s.を使ったときと同じ振る舞いになるはずです。これは良いか悪いかを示唆しないでください。ちょうどit.gets_sが私が設定しようとしているハンドラfuncを知りたくありません。同様に私の関数は、ユーザーが設定する無効なハンドラ関数を知らない。私は_set_invalid_parameter_handler()関数がgets_sが使うものを設定する_invalid_parameter_handler型のCランタイムグローバル変数があると思う。
はい私はいくつかの '失敗コード'を返すことができますが、他の関数ではなく '_set_invalid_parameter_handler'によって設定されたハンドラを呼び出す方法を学びたいと思います。 – rsjethani
@ryanlancer私はあなたが関数ポインタについて知らないと思います。私は私の答えを編集しました。 – cnicutar
@cnicutar編集部分をご覧ください。 – rsjethani