簡體   English   中英

strchr導致C中的分段錯誤

[英]strchr causing segmentation fault in C

我在使用C程序時遇到問題。 我知道strchr()引起了問題,並且正在返回

分段故障

我的代碼如下:

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

我不知道為什么會收到錯誤消息。 我可以猜測的一件事是我的“字符串”有時不包含字符。 那可能是原因嗎?

我無法控制輸入字符串,如何停止它?

完整代碼

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

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

首先,嘗試為您的方法打印輸入。

這里

strchr函數在字符串中搜索c的首次出現。 搜索中包括空字符終止字符串。

您確定您的字符串合法嗎? (表示以null結尾)

我認為這可能導致您的問題

strchr(char * string,int c)函數返回一個指針,該指針指向字符串中字符c的第一個匹配項;如果找不到匹配的字符,則返回NULL指針。

由於搜索中包含空字符終止字符串,因此必須確保您的字符串以空字符終止,否則搜索將超出范圍。

如果要打印字符串或對結果執行其他操作,請首先檢查指針; 在您的特定情況下:

if(pointer != NULL)
   printf(...);
   [...]

要編寫保存代碼,請始終執行輸入驗證:

兩種方法之一(如果不應傳入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;
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM