Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.01.2009, 17:29   #1
ActioNs
Пользователь
 
Регистрация: 17.07.2008
Сообщений: 38
По умолчанию Возвращение массива символов char

Написал функцию перевода из int в char, но есть одна проблема.
Вот функция:

Код:
char IntToStr( int Value )
{
	char str[32];
	itoa(Value, str, 10);
	return str;
}
Необходимо вернуть массив символов char[].
char[] IntToStr( int Value ) - выдает ошибку.
указатель тоже нельзя возвращать - возвращаем адрес локальной переменной..

конечно есть вариант передавать в качестве второго аргумента указатель на буффер, куда засунуть результат, но это сделаю второй перегружаемой функцией, нужна именно такая которая вернет результат =)
ActioNs вне форума Ответить с цитированием
Старый 08.01.2009, 22:21   #2
v_root_mne_logi
 
Регистрация: 08.01.2009
Сообщений: 9
По умолчанию

А как насчет:
Код:
char * intToStr(int val){
     char * ret = NULL;
     asprintf(&ret, "%d", val);
     return ret;
}
Тут конечно есть проблема в том, что asprintf алокирует память и после использования ее надо освободить. Статический массив объявить внутри функции нельзя, так как переменная помрет на выходе из функции. ИМХО, другого решения я не нахожу (для С), если ты пишешь на С++ то тогда лучше работать со std::string и тогда утечки памяти можно уверено избежать.
Код:
#define BUF (32)
std::string intToStr(int val){
     char buf[BUF];
     sprintf(buf, "%d", val);
     return buf;
}
v_root_mne_logi вне форума Ответить с цитированием
Старый 09.01.2009, 19:00   #3
v_root_mne_logi
 
Регистрация: 08.01.2009
Сообщений: 9
По умолчанию

вот сегодня пришло в голову, что возможно, если объявить внутри функции
static char arr[CONST], то мне кажется, что отработает как надо...
Правда не проверял, нет пока возможности.
Естесственно, что функция возвращает char *, а не просто char
v_root_mne_logi вне форума Ответить с цитированием
Старый 10.01.2009, 02:33   #4
StarWorm
Форумчанин
 
Регистрация: 17.11.2008
Сообщений: 233
По умолчанию

Создавай Чар* динамически
Код:
char* IntToStr(int n)
{
    int SIZE=...;//Сдесь можешь делить на 10, пока не получишь 0 и использовать счетчик;
    char* str = new char[SIZE+1]; //для '\0'
    ... //присвоения и т.п.
    return str;
}
А в main() удаляй
Код:
int main()
{
    char* myStr;
    int n=333;
    myStr=IntToStr(n);
    ... //делай что тебе надо
    if(myStr)delete [] myStr;
}
P.S. что то типо этого... код не проверял, писал сразу... Так что может и не работать!
StarWorm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка cannot convert from 'char *' to 'char [100]' Stellvertreter Общие вопросы C/C++ 5 30.05.2010 00:02
Возвращение стража.... Манжосов Денис :) Софт 0 18.09.2008 22:57
Есть таблица - В ней три поля int, char, char нужно чтобы данные заносились в таблицу Mysql Muahahaha PHP 8 27.03.2008 11:17
переписать из массива в линейный двунаправленный список чётные элементы массива Black_Ak24 Помощь студентам 12 08.01.2008 00:44