gpt4 book ai didi

c++ - 在 Char 数组中测试 nullptr (C++)

转载 作者:太空宇宙 更新时间:2023-11-04 13:09:50 26 4
gpt4 key购买 nike

这让我很困扰,但我正在尝试为 C++ 编程语言练习做一个练习,问题是简单地找到 char[] 数组的大小和长度,我做了,但是它当我尝试验证它是一个有效指针时遇到问题:

void size_length(const char* p, int& size, int& length)
{
//I don't know why, but this causes all entries to return 0
if (!p) size = 0; length = 0; return;
//Copy the pointer, as I want the original intact
const char* cp = p;
while (*cp++) ++size; ++length;
++size; //Null character
size *= sizeof(char); //For portability
}

int main()
{
char* str{ new char[15]{"A short string"} };
int s{ 0 }, l{ 0 };
size_length(str, s, l);
cout << "Size: " << s << endl << "Length: " << l << endl;
}

在 size_length() 的第二行,当我尝试验证我有一个合法的指针时,例如如果我传递了一个自由存储 nullptr,它会导致所有尝试注册为无效并返回 0、0(我放置了几个语句在一行上以节省此处的空间)。我已经尝试了该语句的变体并传递了许多不同的东西,但它都返回 0、0。但是,如果我删除该行,该程序可以正常工作!

如果有人能告诉我我做错了什么和/或为什么我不应该在这种特定情况下测试 nullptr(我正在尝试做正确的事情通过测试有效性)我将不胜感激。

最佳答案

首先,您应该知道:

if (!p) size = 0; length = 0; return;

相当于:

if (!p)
size = 0;
length = 0;
return;

换句话说,它将 length 归零并返回 无论如何!

如果您的意图是使所有三个语句成为条件语句,您需要:

if (!p) { size = 0; length = 0; return; }

相当于:

if (!p) {
size = 0;
length = 0;
return;
}

同上:

while (*cp++) ++size; ++length;

因为 ++length 当前在循环结束后执行 一次

顺便说一句,我喜欢你“为了可移植性”的说法:-) 根据定义,sizeof(char) 总是 所以绝对没有理由如果没有身份乘法,您的代码将不可移植。

关于c++ - 在 Char 数组中测试 nullptr (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40427506/

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