
paulo1205
(usa Ubuntu)
Enviado em 10/06/2017 - 18:10h
Você não disse se está usando C ou C++. Seria legal saber isso para poder dar a resposta mais adequada para a linguagem que você for usar.
Você mencionou que vai usar
long, sendo assim, o maior valor válido é finito e conhecido, de modo que não vai ser possível representar (de modo válido) um valor com mais dígitos do que um determinado limite calculável. Sabendo esse limite superior de antemão, você não precisaria ter de redimensionar nenhum array.
Você pode saber quantos bits há num
long (ou outro tipo qualquer), fazendo o seguinte.
size_t n_bits_long=sizeof(long)*CHAR_BIT; // CHAR_BIT (quantos bits num char) é definido em <limits.h>.
Por exemplo, com um
long de 64 bits, uma representação em string com base binária (apenas algarismos 0 e 1) caberia em 65 bytes (64 para os algarismos binários e mais um para o byte nulo que termina a string).
Se em vez de representação binária você quisesse usar representação decimal (algarismos de 0 a 9), você poderia calcular a quantidade máxima de bits do seguinte modo.
// Parcela “1” porque mesmo o valor zero precisa de pelo menos um algarismo.
size_t n_digitos_long=1+n_bits_long*log10(2);
A essa quantidade de dígitos, você acrescentaria mais um byte para pode acomodar o byte nulo terminador da string, e esse seria o tamanho máximo necessário para conseguir escrever um valor válido contido num
long.
De todo modo, que você quiser realocar um array que tenha sido alocado dinamicamente com alguma função da família de
malloc(), você pode usar a função
realloc().