View Full Version : [c] puntatori astringa
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 ?
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?? ;)
Devo stampare il decimale in binario.
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;
}
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?
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;
}
vBulletin® v3.6.4, Copyright ©2000-2024, Jelsoft Enterprises Ltd.