在c ++中使用nullptr停止片刻

时间:2016-11-14 12:15:34

标签: c++ pointers

我尝试在一段时间内使用nullptr,如果空指针停止在。

#include <iostream>

using namespace std;

int count_x(char* p, char x)
{
  int count = 0;
  while(p)
  {
    if (*p==x)
      ++count;
    ++p;
  }
  return count;
}

int main(int argc, char *argv[])
{
  char *arr = "aabbaa";
  char s = 'a';
  cout << count_x(arr, s) << endl;
  return 0;
}

但是使用此代码,当我执行时,我收到此消息

Bus error: 10

我用这一行编译

g++ -std=c++11 -o count_x count_x.cpp

2 个答案:

答案 0 :(得分:1)

字符串是零终止的,这意味着它的最后一个字节是0.如果增加指针,则需要检查指针指向为0,而不是 beeing < / em> 0。

#include <iostream>

using namespace std;

int count_x(char* p, char x)
{
    int count = 0;
    while (*p)
    {
        if (*p == x)
            ++count;
        ++p;
    }
    return count;
}

int main(int argc, char *argv[])
{
    char *arr = "aabbaa";
    char s = 'a';
    cout << count_x(arr, s) << endl;
    return 0;
}

答案 1 :(得分:0)

使用while(p),您将运行很长时间(或者更有可能,执行内存访问冲突并更快地生成分段错误)。

除此之外,正式描述是*p == x一旦p指向它最初指向的字符串的内存边界之外就会生成未定义的行为。

长话短说,将while (p)更改为while (*p),或者只是执行:

for (int i=0; p[i]; i++)
{
    if (p[i] == x)
        ++count;
}