Код должен выглядеть так:
void generCad(int n, char** cad)
{
int m = n, c = 1;
while (m >>= 1) // this divides the m by 2, but by shifting which is faster
c++; // here you counts the bits
*cad = new char[c + 1];
(*cad)[c] = 0; // here you end the string by 0 character
while (n)
{
(*cad)[--c] = n % 2 + '0';
n /= 2;
}
cout << "Cadena = " << *cad;
}
Обратите внимание, что cad теперь char **, а не char *. Если это просто char *, то вы не получите указатель, как вы ожидаете, вне функции. Если вам не нужна строка вне этой функции, то она может быть передана как char *, но затем не забудьте удалить cad перед выходом из функции (хорошая привычка; -))
EDIT:
Этот код, вероятно, будет более читабельным и сделает то же самое:
char * toBin(int n)
{
int m = n, c = 1;
while (m >>= 1) // this divides the m by 2, but by shifting which is faster
c++; // here you counts the bits
char *cad = new char[c + 1];
cad[c] = 0; // here you end the string by 0 character
while (n)
{
cad[--c] = n % 2 + '0';
n /= 2;
}
cout << "Cadena = " << cad;
return cad;
}
int main()
{
char *buff;
buff = toBin(16);
delete [] buff;
return 1;
}