Справка по программированию на C с методом Int2String - PullRequest
0 голосов
/ 12 сентября 2010

У меня проблемы с моим методом Int2String. Я новичок в C, поэтому я не уверен, что это будет правильный путь. Я получаю несколько сообщений об ошибках:

ошибка: конфликтующие типы для int2String предупреждение: возвращение делает целое число из указателя без приведения

Вот мой метод:

char int2String(int num, char intStr[10]) {
char itoa(num, intStr[10]);
return itoa;
}

Спасибо за любую помощь!

Ответы [ 3 ]

4 голосов
/ 12 сентября 2010

В вашем коде

char itoa(num, intStr[10]);
return itoa;

сообщает компилятору, что вы объявляете функцию с именем itoa с определенной сигнатурой, затем вы хотите вернуть (указатель на)эта функция .Поскольку вы объявили тип возвращаемого значения как char, компилятору это не понравится.

Он должен выглядеть примерно так:

char int2String(int num, char intStr[10]) {
  char ch = itoa(num, intStr);
  return ch;
}

т.е. , вызывать функциюitoa с данными параметрами, сохранить его возвращаемое значение в локальной переменной типа char, а затем вернуть его.(Локальная переменная может быть встроена, чтобы упростить код.)

Теперь это по-прежнему не радует компилятор, поскольку itoa, хотя и не является частью стандарта, по соглашению объявлено, что оно возвращает char*и принять 3 параметра, а не 2. (Если только вы не используете нестандартное определение, если itoa, то есть.)

При «стандартной» версии itoa эта модификация должна работать (теоретически припо крайней мере - я не проверял это: -)

char* int2String(int num, char intStr[10]) {
  return itoa(num, intStr, 10);
}
1 голос
/ 12 сентября 2010

Помимо любопытства относительно того, почему вы оборачиваете нестандартную функцию, подобную этой, в вашей функции есть пара ошибок.

  1. Ваша функция int2String должна возвращать char * вместо char. Как вы понимаете, вы говорите «int2String возвращает символ», что, я полагаю, не то, что вы хотите. В Си строки представлены в виде массива символов, поэтому вы должны возвращать массив, который является указателем на тип элемента, хранящегося в массиве (в данном случае указатель на char).

  2. Хотя это технически допустимо, параметр intStr написан довольно странным образом. Причина, по которой это работает, заключается в том, что нотация char intStr[10] эквивалентна char *intStr, что и должно быть на самом деле.

  3. Прежде всего, функция itoa является нестандартной функцией, поэтому она очень сильно зависит от реализации. Согласно Википедии декларация для itoa составляет void itoa(int input, char *buffer, int radix). При этом вам нужно выделить буфер и заполнить его, используя itoa. Я оставлю это как небольшое упражнение :) 1027 *

  4. Наконец, ваш оператор возврата является причиной ошибки. Поскольку itoa - это функция, то, что вы написали, говорит: «верните функцию itoa». Это означает, что вы пытаетесь вернуть функцию (которая может быть представлена ​​в виде указателя), где компилятор ожидает char.

Я настоятельно рекомендую вам ознакомиться с Книгой C , она является отличным введением в язык и содержит подробные сведения о том, что такое указатели и как они используются. Еще пара ресурсов, которые стоит проверить:

0 голосов
/ 12 сентября 2010

Вы должны возвращать символ *, а не символ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...