1

Cプログラムに問題があります。それが問題の原因であることはわかってstrchr()おり、それが戻ってきています

セグメンテーション違反

私のコードは次のとおりです。

char *pointer;
pointer = strchr(string, character);

エラーメッセージが表示される理由がわかりません。私が推測できることの1つは、私の「文字列」に文字が含まれていないことがあることです。それが理由でしょうか?

入力文字列を制御できないため、どうすれば停止できますか?

完全なコード

int index(const char *string, char character)
{
    const char *pointer;
    pointer = strchr(string, character);

    if(pointer)
        return (pointer - string);
    else
        return -1;
}
4

3 に答える 3

0

strchr(char *string, int c)関数は、string 内で文字cが最初に出現する位置へのポインターを返すか、一致する文字が見つからない場合は NULL ポインターを返します。

ヌル文字終了文字列が検索に含まれるため、文字列がヌル終了であることを確認する必要があります。そうしないと、検索が範囲外になります。

文字列を出力したり、結果に対して他の操作を実行したい場合は、最初にポインターを確認してください。あなたの特定のケースでは:

if(pointer != NULL)
   printf(...);
   [...]
于 2014-03-18T16:05:17.963 に答える
0

保存コードを記述するには、常に入力検証を実行します。

難しい方法のいずれか(NULL渡されない場合):

ssize_t index(const char * string, const char character)
{
  assert(NULL != string);

  const char * pointer = strchr(string, character);

  if (pointer)
  {
    return (pointer - string);
  }
  else
  {
    return -1;
  }
} 

またはスムーズな方法 (静かNULLに と同じように扱います""):

ssize_t index(const char * string, const char character)
{
  const char * pointer = NULL;

  if (string)
  {
    pointer = strchr(string, character);
  }

  if (pointer)
  {
    return (pointer - string);
  }
  else
  {
    return -1;
  }
}
于 2014-03-18T18:21:57.013 に答える