繁体   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