我正在尝试在string.h中创建类似strlen()
的函数
它给了我错误can not convert char* to char
#include<stdio.h>
#include<conio.h>
int xstrlen(char string);
void main(void) {
char string[40];
puts("Enter string:");
gets(string);
printf(" %s is the length of %d", string, xstrlen(string));
}
int xstrlen(char string[]) {
int i;
for (i=0; ; i++) {
if (string[i] == '\0')
break;
}// for ends
return i;
}
答案 0 :(得分:7)
你的原型:
int xstrlen(char string);
与函数定义不匹配:
int xstrlen(char string[]) { ... }
将原型更改为:
int xstrlen(char string[]);
答案 1 :(得分:0)
xstrlen
原型说该函数只需要一个char。这就是编译器在编译主函数时所知道的 - 因此它会抱怨,因为你将一个数组传递给它。
请注意,xstrlen定义本身具有正确的签名(采用数组)。
修复xstrlen原型以阅读
int xstrlen(char string[]);
答案 2 :(得分:0)
尝试:
int xstrlen(char *string);
答案 3 :(得分:0)
您的声明是
int xstrlen(char string);
它应该是(正如你以后使用的那样):
int xstrlen(char string[]);
我会选择char *string
。
答案 4 :(得分:0)
原型之前的原型是错的,你写了
int xstrlen(char string);
虽然它应该是
int xstrlen(char string[]);
main的返回类型不是 void ,而是 int 。
答案 5 :(得分:0)
将int xstrlen(char string);
更改为int xstrlen(char string[]);
你也可以使用while而不是带有break的for循环改进你的函数:
int xstrlen(char string[])
{
int i;
i =0;
while(string[i]!= 0)i++;
return i;
}
答案 6 :(得分:0)
请注意:
之间的不匹配int xstrlen(char string);
和此:
int xstrlen(char string[])
它们应匹配(后者是正确的)。如果你想要真正准确,它应该是char const *string
,表示这个函数不会修改传递给它的内容。
当你完成这项工作后,对你的代码进行驱魔,不再使用gets
,然后永远消除你的词汇中的污秽,以免成为邪恶的代理人! : - )
答案 7 :(得分:0)
这个函数的一个更好的替代方法是像这样的空for循环:
for(int i=0;string[i]!='\0';i++); // this ';' is same as emptied body curly braces { }
这将与功能相同。