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.我忽略了一个非常大的问题吗?任何朝着正确方向的推动都会有所帮助,但请不要只给我答案.
您编写了一个计算本地"字符串"长度的函数X.数组X甚至没有初始化.它包含垃圾.您的函数返回该垃圾字符串的长度.它不一定0,只是偶然发生在您的实验中为零.一般情况下,您的函数将返回垃圾值或只是导致程序崩溃.行为未定义.
换句话说,当您调用函数时,您编写的代码将完全忽略strlen("hello")该"hello"字符串.您的函数仍然坚持使用本地数组X,而不是使用"hello"从外部传递的参数字符串.
如果你是谁写了这个函数,那真的是一个问题:你为什么这样做?
PS一个更明智的实现strlen可能会收到一个const char *参数(不是char *)并在size_t类型域中执行计数(不是int).
PPS *(p + i)相当于p[i].许多人会发现后者比前者更具可读性.
| 归档时间: |
|
| 查看次数: |
1982 次 |
| 最近记录: |