ciao a tutti,
lavoro da poco con c e sto provando a realizzare una funzione che mi tolga gli spazi a sx e dx di una stringa (il trim di visual basic per intenderci).
questo è il risultato al quale sono giunto:
codice:
...
int main()
{
char nome[100];
char *p1;
printf("\nInserisci il nome : ");
gets(nome);
trim(p1, nome);
puts(p1);
while(!getchar()=='\n');
}
void trim(char *p, const char *str)
{
int i, inizio, fine;
char *tmp;
tmp = (char *) malloc(sizeof(char));
for(inizio=0; str[inizio]!='\0'; inizio++)
{
if(str[inizio]!=' ')
break;
}
for (fine=strlen(str); fine>0; fine--)
{
if(str[fine]!=' ' && str[fine]!='\0')
break;
}
tmp = (char *) realloc(tmp, (fine - inizio + 2) * sizeof(char));
if (tmp != NULL)
{
for (i=0; i<=(fine-inizio); i++)
{
tmp[i] = str[inizio+i];
}
tmp[++i]='\0';
strcpy(p, tmp);
}
else
{
printf("\nMemoria Insufficiente\n");
}
}
la funzione in se non è molto difficile, ma è la prima volta che mi trovo a lavorare con i puntatori nella pratica e sono sicuro di aver scritto parecchie vaccate.
apparentemente cmq la funzione funziona quando la variabile nome è inferiore ai 20 caratteri, in caso contrario ne viene aggiunto uno a caso in fondo..
qualcuno può dirmi, senza paura di ferirmi , cos'ha che non va quanto scritto?