2

文字列に対して操作を実行する関数があります。たとえば、String *concat(s1, s2);Which は s1+s2 を返し、新しい文字列を返します。

別のユーザーが NULL パラメーターを送信する可能性があると思います。NULL を確認できました。

if(s1 == NULL || s2 == NULL)
  return NULL;

そしてNULLを返すだけです。

または、次のコマンドでプログラム全体を終了させることもできます:

exit(EXIT_FAILURE);

問題を解決する最善の方法は、関数を終了して何も返さないことだと思います。しかし、ユーザーが文字列を期待していて、私が戻ってきた場合、彼はクラッシュして燃えませんか? また、ユーザーに印刷するのは悪い考えだと思います。

関数を終了する方法を見つけて、いずれにしてもプログラムの実行を継続できるようにしたいと思います。

4

2 に答える 2

1

NULL が (設計上) 入力値として許可されているかどうかによって異なります。そうである場合、次のことができます。

  • NULL を返す (戻り値が許可されている場合 - 入力値が許可されていると仮定すると、おそらくそうです)
  • ステータスコードを返すか、何らかのerrno値を使用して、何らかのエラー状態を通知します

NULL が無効な値である場合、NULL を渡すことはプログラマーのエラーであるため、関数の呼び出し元がチェックを行う必要があります。前の 2 つのアプローチを使用できます。また、次のこともできます。

  • 「未定義の動作」を利用すると、何が起こる可能性があります。アサーションを使用するのがおそらく最良の方法です。

    #include <assert.h>
    
    assert (str1 != NULL && str2 != NULL);
    

アサーションを使用すると、リリース buld でチェックをオフにできるという利点があるため、パフォーマンスが低下することはありません。

ここで重要なのは、どのルートをたどっても、それを明確に文書化し、それに固執することです。

于 2013-09-21T12:43:56.917 に答える