В вашей функции decToBase()
проблема, о которой она предупреждает, заключается в использовании char res[500];
, который является массивом, размещенным в стеке как локальная переменная. Все они отбрасываются при возврате функции, поэтому, если вы возвращаете указатель на (или: адрес) массива res
, этот указатель указывает на мусор в стеке.
Вы должны найти некоторыеДругой способ управлять этим распределением, и хотя некоторые могут предложить использовать malloc()
для выделения памяти из системы, это, вероятно, плохая идея, поскольку она требует проблем с утечками памяти.
Лучше передатьбуфер, который вы хотите заполнить, и используйте его. Затем вызывающий выполняет выделение, и вы не беспокоитесь об утечках памяти.
char *decToBase(int base, int dec, char *outbuf)
{
int index = 0; // Initialize index of result
// Convert input number is given base by repeatedly
// dividing it by base and taking remainder
while (dec > 0)
{
outbuf[index++] = reVal(dec % base);
dec /= base;
}
outbuf[index] = '\0';
// Reverse the result
strev(outbuf);
return outbuf;
}
, и тогда ваша main
функция будет выглядеть так:
int main()
{
char decbuf[500];
decToBase(16, 248, decbuf);
printf("Buffer is %s\n", decbuf);
}
Это все еще не супер идеал, потому что ваша decToBase()
функция не знает, насколько велика outbuf
, и возможны переполнения, поэтому опытный и / или параноидальный программист также передаст размер outbuf, чтобы ваша функция зналасколько нужно использовать.
Но это шаг, к которому вы придете позже.