我尝试在一段时间内使用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
答案 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;
}