我一直在研究我的C赋值,我尝试复制strlen()函数而不实际使用它。这是我一直努力工作的代码。但是,不知何故,主要功能并没有反映出mystrlen()函数中发生了什么。你能否告诉我为什么它不能用作strlen()函数?
#include <stdio.h>
int mystrlen(char *input_string) {
/* This function returns the length of the input string */
/* WRITE FUNCTION CODE HERE! */
char str1[50];
int abcd = 0;
scanf("%s", str1);
int m;
for(m=0; str1[m]; m++){
abcd ++;
}
return 0;
}
int main(int argc, char **argv) {
int length;
if (argc!=2) {
printf("Usage: strlen <input_string_with_no_space_inside_it>\n\n");
return 1;
}
length = mystrlen(argv[1]);
printf("The length is: %d characters.\n",length);
return 0;
}
答案 0 :(得分:1)
此:
return 0;
应该是:
return abcd;
也就是说,abcd
是这个变量的可怕名称,而且该函数作为strlen()
替代品毫无意义。它没有触及其论点,并致电scanf()
来阅读用户的输入,您真的不想让strlen()
替换。
以下是编写它的一种方式:
size_t mystrlen(const char *s)
{
size_t len = 0;
if(s != NULL)
{
while(*s != '\0')
{
++len;
++s;
}
}
return len;
}
改进包括:
size_t
- 类型的返回值(长度是大小,不能为负数),因此size_t
是正确的,真正的strlen()
使用的是什么。它还处理给予NULL
作为奖励。
匹配main()
可以完成您所做的事情:
int main(int argc, char **argv)
{
if (argc != 2)
{
printf("Usage: strlen <input_string_with_no_space_inside_it>\n\n");
return 1;
}
const size_t length = mystrlen(argv[1]);
printf("The length is: %zu characters.\n", length);
return 0;
}
这基本上围绕int
- 至 - size_t
更改。另请注意,在支持引用的shell中,您可以像这样运行程序:
$ ./strlen "hello this is a string with spaces in it"
它将在argv[1]
中传递整个引用的字符串(当然没有引号)。
答案 1 :(得分:0)
首先,您尝试传递一个字符串,然后在mystrlen中调用scanf函数。删除此scanf。 其次,你的函数总是返回零而不是变量abcd的值。