Есть такая фот функция:
void writeProfileFile(char *fileName, String value);
Т.к имена файлов состоят из цифр, пишу так:
int a = numProfileFile; //исходное число
int radix = 10; //система счисления
char buffer[20]; //результат
char *p; //указатель на результат
p = itoa(a,buffer,radix);
writeProfileFile(p,"value");
Всё работает, но это неправильно. Хочу создать функцию которую и буду вызывать, делаю так
char *convertIntToChar(int number)
{
int a = number;
int radix = 10;
char buffer[20];
char *p;
p = itoa(a,buffer,radix);
return p;
}
Но при вызове writeProfileFile(convertIntToChar(5), String value);
файл не создается. И подозреваю что неправильно сделал функцию convertIntToChar. Как переделать правильно? Спасибо.
Ваша функция возвращает указатель на локальную память. После выхода с функции её значение неопределенно (правда, как выяснилось, некоторые эксперты на собеседованиях спрашивают о том, как использовать это неопределенное значение).
Если Вам доступен с++11 (а сейчас сложно найти компилятор без его поддержки), тогда пишите так
std::string filename = std::to_string(5);
writeProfileFile(filename.c_str(), value);
Если же по какой то причине он недоступен, напишите эту обёртку сами
std::string to_string(int x)
{
char buf[30];
itoa(x, buf, 10);
return std::string(buf);
}
P.S. функцию writeProfileFile лучше написать так, что бы она получала std::string, а не char*
на вход. (а может даже const std::string&
).
Сделайте, раз уж полная беда с string
, так:
char *convertIntToChar(int number)
{
int a = number; //исходное число
int radix = 10; //система счисления
static char buffer[20]; //результат
itoa(a,buffer,radix);
return buffer;
}
Только учтите, что следующий вызов этой функции будет портить результат предыдущего, так что не сохраняйте этот указатель, а сразу используйте.
В общем проблема решилась так:
char *convertIntToChar(int number)
{
int a = number; //исходное число
int radix = 10; //система счисления
char buffer[20]; //результат
itoa(a,buffer,radix);
return buffer;
}
Проблема была в том, что возвращал не то, что надо. Спасибо всем за помощь в решении вопроса.
Вопрос касается перегрузки operator[], а именно различия в создании константной и неконстантной версииВ большинстве случаев это будет выглядеть...
При попытке вывести ip, вместо заданного выводятся непонятные цифры
Есть прокси-сервер, написанный на асинхронном API BoostAsio - async_* функции и коллбеки
Решил реализовать на своём сайте поисковикСделал через ajax в js