PDA

View Full Version : [c] puntatori astringa


buddace
18-06-2007, 13:01
domanda molto semplice.
Visto che nel compilatore che sto usando non è implementata la funzione itoa()
ho pensato bene di scriverla.

char* bitoa(unsigned int number)
{

char string[N];
unsigned int i;

for(i=N-1;i>0;i--)
{string[i]=(number%2)+'0';
number=number/2;}
return string;


}


Se faccio una chiamata a questa funzione di questo tipo
printf("%s",itoa(numero));
con numero unsigned int vengono fuori delle porcherie, dove sbaglio ?

andbin
18-06-2007, 13:15
Se faccio una chiamata a questa funzione di questo tipo
printf("%s",itoa(numero));
con numero unsigned int vengono fuori delle porcherie, dove sbaglio ?Quando questa tua funzione termina, le variabili locali (come l'array 'string') spariscono. Tra l'altro .... non ti basta usare %d e passare direttamente il numero alla printf?? ;)

buddace
18-06-2007, 13:26
Devo stampare il decimale in binario.

andbin
18-06-2007, 13:32
Devo stampare il decimale in binario.Ah, sì, non avevo letto bene il tuo codice, visto che poi sotto parlavi di itoa.

Vedi in <questo> (http://www.hwupgrade.it/forum/showthread.php?t=1110449) thread un mio esempio.

labrosan
18-06-2007, 13:56
devi dichiarare string come puntatore e allocare lo spazio necessario alla stringa

char *string;

string=(char*)malloc(N*sizeof(char));

...elaborazione...

return string;

Ciao

labrosan
18-06-2007, 14:06
Esempio di codice:

#include <stdio.h>
#include <stdlib.h>

char* bitoa(unsigned int number);

int main ( void )
{
unsigned int numero=100;

printf("%d --> %s \n",numero,bitoa(numero));
system("pause");
return 0;
}


char* bitoa(unsigned int number)
{ char *string;
unsigned int i;
unsigned int temp=number;
int len=0;

while (temp)
{ temp/=2; // calcolo quanto sarà lunga la string
len++; }

string=(char*)malloc(len*sizeof(char)); // alloco lo spazio necessario alla stringa

for(i=0 ; i<len ; i++)
{
string[i]=(number%2)+'0'; // conversione int-char
number=number/2; // ottengo un numero al rovescio
}

string[i]='\0'; // terminatore di stringa

for ( i=0 ; i<len/2 ; i++ ) // raddrizzo la stringa
{
temp=string[i];
string[i]=string[len-1-i];
string[len-1-i]=temp;
}

return string;
}

andbin
18-06-2007, 14:23
while (temp)
{ temp/=2; // calcolo quanto sarà lunga la string
len++; }

string=(char*)malloc(len*sizeof(char)); // alloco lo spazio necessario alla stringaE lo spazio per il nullo finale? no?

buddace
19-06-2007, 09:55
Alla fine l'ho fatta cosi. Considerate che le mie stringhe sono sempre di 8 caratteri e per mie necessità se passo stringhe più corte devo allungarle ad 8.
char* bitoa(unsigned int number,unsigned int lung,char end[])
{

static char string[N];
int i,y=0;

//number <<= N-lung;
for(i=N-1;i>=0;i--)
{
if(i<N-lung)
{string[i]=end[y];
y++;}
else
{string[i]=(number%2)+'0';
number=number/2;}
}

return string;
}