【发布时间】:2014-09-03 18:05:55
【问题描述】:
对于家庭作业,我们必须编写一个简短的程序,使用 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[0]的值分配给p这里 --p = &X[0]; -
“请不要只给我答案”——试试Rubber Duck Debugging。向鸭子解释
X应该做什么。 -
如果您对
char X[50];和p = &X[0];没有任何理由,您可以直接删除这些行。 -
您知道
char X[50]有不确定的内容吗?您永远不会检查传入char *p引用的数据的长度,而是通过使用本地自动(且不必要的)数组的地址覆盖传入地址而立即丢失它。并且为了保持一致性,char* p应该是const char *p并且函数应该返回size_t,而不是int。 -
保留名称
strlen。使用该名称编写您自己的函数可能会导致意外行为。例如,对strlen的调用可以调用您的函数或标准函数。使用不同的名称,例如my_strlen。
标签: c++ arrays string pointers