gpt4 book ai didi

c++ - 如果我将 p!=nullptr 更改为 *p! ='\0' ,然后就可以了,但是为什么呢?

转载 作者:搜寻专家 更新时间:2023-10-31 00:29:00 26 4
gpt4 key购买 nike

我的 IDE 是 Xcode。以下代码无法按预期运行。尽管在较新的 C++ 标准中推荐使用 nullptr。

#include<iostream>
using namespace std;

int count_x(char * p, char x)
{
if(p==nullptr)return 0;
int count = 0;
for (; p!=nullptr; ++p)
if(*p == x)
++count;

return count;
}

int main()
{
char str[] = "I'm a little girl in the little world!";

cout<<"number of t in the string is "<<count_x(str, 't')<<"\n";
}

/*
the expected output is:

number of t in the string is 5
Program ended with exit code: 0

*/

上面的代码可以编译成功,但是运行起来却得不到预期的输出。在 Debug模式下,我发现 for 循环并没有停止。所以我将代码更改为以下代码:

#include<iostream>
using namespace std;

int count_x(char * p, char x)
{
if(p==nullptr)return 0;
int count = 0;
for (; *p!='\0'; ++p)
if(*p == x)
++count;

return count;
}

int main()
{
char str[] = "I'm a little girl in the little world!";

cout<<"number of t in the string is "<<count_x(str, 't')<<"\n";
}

/*
the expected output is:

number of t in the string is 5
Program ended with exit code: 0

*/

在我将 p!=nullptr 更改为 *p!='\0' 之后,代码运行良好并且得到了预期的输出。尽管代码似乎有效,但我仍然不明白失败或成功的原因。

你能给我一些线索或建议吗?谢谢。

最佳答案

The only difference is change nullptr into '\0'.

还有一个区别:

 p!=nullptr
*p!='\0'
^
|
+---- right here, a dereference operation

I still don't understand the reason for failure ...

I figured out that the for loop did not stop

你的条件是当 p 的值为 nullptr(即零)时停止。但是你只会增加 p,那么它怎么可能达到零呢?在您溢出字符串之前,它永远不会达到零。

I still don't understand the reason for ... success.

在您成功的尝试中,结束条件不是比较指针,而是将指向的值与空终止字符进行比较。只要字符串以 null 结尾,这就有效。


补充说明:尽管空指针和空字符具有相同的名称(null)和相同的值(0),但它们具有不同的类型并且是不同的概念。

关于c++ - 如果我将 p!=nullptr 更改为 *p! ='\0' ,然后就可以了,但是为什么呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43044423/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com