strchr导致C中的分段错误

时间:2014-03-18 15:53:15

标签: c string strchr

我遇到了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;
}

3 个答案:

答案 0 :(得分:0)

首先,尝试打印方法的输入。

来自here

  

strchr函数在字符串中搜索第一次出现的c。空字符终止字符串包含在搜索中。

你确定你的字符串合法吗? (以null结尾)

我认为这可能会导致您的问题

答案 1 :(得分:0)

strchr(char * string,int c)函数返回指向字符串中第一个出现的字符 c 的指针,如果找不到匹配的字符则返回NULL指针

由于搜索中包含空字符终止字符串,因此必须确保字符串以空值终止,否则搜索超出范围。

如果您要打印字符串或对结果执行其他操作,请先检查指针;在你的具体情况:

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

答案 2 :(得分: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;
  }
}