编译器错误:无法将char *转换为char

时间:2010-07-02 14:32:43

标签: c pointers compiler-errors

我正在尝试在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;
}

8 个答案:

答案 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)

  1. 原型之前的原型是错的,你写了

    int xstrlen(char string);
    

    虽然它应该是

    int xstrlen(char string[]);
    
  2. main的返回类型不是 void ,而是 int

  3. 下次你发布这样的问题时,请记得指定编译器给出的错误。

答案 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 { }

这将与功能相同。