gpt4 book ai didi

c++ - strlen 函数总是返回 0

转载 作者:行者123 更新时间:2023-11-30 00:50:14 34 4
gpt4 key购买 nike

对于家庭作业,我们必须编写一个简短的程序,使用 argc 和 argv 告诉您传递给 main 的参数数量、它们的数据地址以及每个参数是什么。我们还必须编写一个名为 strlen 的函数(我们不允许使用库中包含的任何类似函数)来计算使用指针传递给 main 的每个参数的长度。我的函数总是返回 0。很抱歉我问了这样一个基本问题,但作为一名一年级学生,我还没有接受过使用调试器的培训。这是我的代码:

int strlen(char * p)
{
char X[50];
p = &X[0];
int i = 0;

while (*(p + i) != '\0')
i++;

return i;
}

我已经尝试了几种不同的方法来解决这个问题,但无论函数似乎总是返回值 0。我是否忽略了一个明显的大问题?任何朝着正确方向的插入都会有所帮助,但请不要只给我答案。

最佳答案

您编写了一个计算局部“字符串”X 长度的函数。数组 X 甚至没有初始化。它包含垃圾。您的函数返回该垃圾字符串的长度。它不一定是 0,它只是在您的实验中不小心碰巧为零。在一般情况下,您的函数将返回一个垃圾值或只是导致您的程序崩溃。行为未定义。

换句话说,当您将函数调用为 strlen("hello") 时,您编写的代码会完全忽略 "hello" 字符串。您的函数仍然坚持使用本地数组 X,而不是使用从外部传递的参数字符串 "hello"

如果这个函数是你写的,那真的是在问你:为什么要那样做?

附言strlen 的更明智的实现可能会接收一个 const char * 参数(而不是 char *)并在 的域中执行计数>size_t 类型(不是 int)。

附言*(p + i) 等同于 p[i]。许多人会发现后者比前者更具可读性。

关于c++ - strlen 函数总是返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25650873/

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