Ошибка компилятора: невозможно преобразовать char * в char - PullRequest
0 голосов
/ 02 июля 2010

Я пытаюсь создать функцию вроде strlen() в string.h

Это дает мне ошибку 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 ]

7 голосов
/ 02 июля 2010

Ваш прототип:

int xstrlen(char string);

Не соответствует определению функции:

int xstrlen(char string[]) { ... }

Измените прототип на:

 int xstrlen(char string[]);
0 голосов
/ 22 февраля 2014

Лучшей альтернативой этой функции является пустой цикл for, например:

for(int i=0;string[i]!='\0';i++); // this ';' is same as emptied body curly braces { }

Это будет делать то же самое, что и функция.

0 голосов
/ 02 июля 2010

Обратите внимание на несоответствие между этими значениями:

int xstrlen(char string);

и это:

int xstrlen(char string[])

Они должны совпадать (и последний является правильным). Если вы хотите получить действительно точную информацию, вероятно, это должно быть char const *string, означающее, что эта функция не будет изменять то, что ей передано.

Когда вы закончите с этим, выполните экзорцизм в своем коде, исключив его использование gets, а затем навсегда исключите эту грязь из своего словаря, чтобы вы не стали агентом зла! : -)

0 голосов
/ 02 июля 2010

Изменить int xstrlen(char string); на int xstrlen(char string[]);

Вы также можете улучшить свою функцию, используя цикл while вместо цикла for:

int xstrlen(char string[])
{
  int i;
  i =0;
  while(string[i]!= 0)i++;
  return i;
}
0 голосов
/ 02 июля 2010
  1. Прототип как раз перед основным неверен, вы написали

    int xstrlen(char string);
    

    , в то время как оно должно быть

    int xstrlen(char string[]);
    
  2. Возвращениетип main не void , но int .

  3. В следующий раз, когда вы напишите такой вопрос, не забудьте указать , который ошибки, которые дает компилятор.
0 голосов
/ 02 июля 2010

Ваша декларация

int xstrlen(char string);

Это должно быть (как вы используете в любом случае позже):

int xstrlen(char string[]);

Я бы вместо char *string.

0 голосов
/ 02 июля 2010

попробуй:

   int xstrlen(char *string);
0 голосов
/ 02 июля 2010

Прототип xstrlen говорит, что функция принимает только один символ.Это то, что компилятор знает при компиляции вашей основной функции - и, следовательно, он жалуется, потому что вы передаете ей массив.

Обратите внимание, что само определение xstrlen имеет правильную сигнатуру (принимая массив).

Просто исправьте прототип xstrlen следующим образом:

int xstrlen(char string[]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...