1

我在使用 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;
}
4

3 回答 3

0

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

这里

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

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

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

于 2014-03-18T16:03:54.167 回答
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 回答
0

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

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

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

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