strlen函数总是返回0

gso*_*ble 1 c++ arrays string pointers

对于家庭作业,我们必须编写一个简短的程序,使用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;
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试了几种不同的东西来解决这个问题,但无论函数总是看起来总是返回值0.我忽略了一个非常大的问题吗?任何朝着正确方向的推动都会有所帮助,但请不要只给我答案.

AnT*_*AnT 5

您编写了一个计算本地"字符串"长度的函数X.数组X甚至没有初始化.它包含垃圾.您的函数返回该垃圾字符串的长度.它不一定0,只是偶然发生在您的实验中为零.一般情况下,您的函数将返回垃圾值或只是导致程序崩溃.行为未定义.

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

如果你是谁写了这个函数,那真的是一个问题:你为什么这样做?

PS一个更明智的实现strlen可能会收到一个const char *参数(不是char *)并在size_t类型域中执行计数(不是int).

PPS *(p + i)相当于p[i].许多人会发现后者比前者更具可读性.