Invalid conversion from `char*' to `char'

Рейтинг: 0Ответов: 2Опубликовано: 29.01.2015

Всем доброго времени суток!

Недавно мы начали разбирать функции, и я пишу третью. И тут сталкиваюсь с ошибкой, которая указана в заголовке: invalid conversion from 'char*' to 'char' - эта ошибка указана в 16 строке.

Ещё одна ошибка: invalid types 'char[int]' for array subscript - на 27/28 строках. Объясните подробно, почему я ошибаюсь, как избегать таких ошибок и как её исправить в моем случае.


В общем, что за функция search и что она дает: в функции есть Vocal[12] - это гласные, мы на вход получаем исходный массив текста и сравниваем каждую букву с нашими гласными, если гласные попались, мы садим их в результирующий массив, в нашем случае - это result[12].


И ещё вопрос, объясните, как объявлять функцию? В каких случаях перед функцией писать void, int, char?

Заранее спасибо за ответы! Буду очень благодарен!


Попробовал поставить везде void search (т.е. только в двух местах) и после аргументов поставил скобки [], заработало. Покажу новый код, работает, но неправильно, по разному - то выводит гласные, то вообще пустая строка.


Всем спасибо, кто отписался!


Поправил код.

main(){
  char text[12];
  char result[12];
  int i;

  gets(text);

  i = strlen(text); //считаем и сажаем нулевой символ в последнюю ячейку
  text[i + 1] = 0;

  search(text, result); //ищем гласные

  getch();
}

void search(char text[], char result[]){
  char vocal[12] = {'A', 'a', 'E', 'e', 'O', 'o', 'Y', 'y', 'U', 'u', 'I', 'i'};
  int i, j, v = 0;

  for(j = 0; j < 11; j++){ // счётчик 1 символа text
    for(i = 0; i < 11; i++){ //сравниваем 1 символ с регистром
      if(text[j] == vocal[i]){ 
        result[v] = text[j];  
        v++;
      }
    }
  }

  printf("\nVocal words: %s", result);
}

Ответы

▲ 3Принят

писать нужно то, что функция возвращает. Судя по коду, она ничего не возвращает. Поэтому нужно писать void в начале.

А вот ругается оно потому, что параметры Вы передаете как строки, а функция ожидает символ. По коду она оперирует массивами символов (то есть, строками).

То есть, я бы делал объявление как минимум такое:

void search(char a[], char b[]);

И ещё. Вы пишите, что код на Си. Так зачем тогда подключаете плюсовые плюшки и компилируете плюсовым компилятором?

▲ 1

Несколько замечаний: не надо использовать gets, лучше fgets. Пример есть даже в Википедии.

Внутренний цикл совершенно бессмысленный, его можно заменить функцией strchr.

getch, видимо, используется для того, чтобы окошко не закрывалось. Лучше сразу учиться писать нормально, без таких вот "костылей", а программу запускать в командной строке.

В качестве компилятора рекомендую TinyCC. Он умеет запускать программу сразу, без компиляции, что очень удобно как раз для таких "лабораторок". А еще почитайте, что такое юнит-тестирование. Сразу отпадут многие вопросы и ошибки. Советую фреймворк greatest.