La stringa car[] che dichiari è decisamente troppo corta, per sicurezza dovrebbe essere diOriginariamente inviato da rob_santini
codice:int lung4=strlen(temp->cod_4); if (lung4<3){ int diff=3-lung4; char car[2]; // 2 caratteri sono pochi, dovresti usarne 5 (4+1per il terminatore) for (i=0;i<diff; i++){ car[i]='0'; } strcat(car,temp->cod_1); // ERRORE ! alla stringa car[] non hai messo il terminatore '\0' !!! cout<<"\nSTRINGA: "<<car<<"\n"; strcpy(temp->cod_1,car); cout<<"\nSTRINGA: "<<temp->cod_1<<"\n"; }
almeno 5 caratteri ovvero la massima dimensione richiesta + uno per il terminatore.
Ho notato che non metti il teminatore alla stringa, le NULL terminated string tipiche del linguaggio C,
si chiamano in questo modo proprio perchè la fine di ogni stringa è segnalata dal carattere
NULL o '\0' insomma uno valore 0.
Tutte le funzioni create per questo tipo di stringhe danno per scontato che detto terminatore
esista e che si trovi entro la sequenza di celle di memoria riservate alla stringa stessa,
pena un probabile crash del programma.
Ad ogni modo, se il valore è già convertito in una stringa, potresti usare una soluzione come questa:
Ovviamente si presume che anche la stringa temp->cod_4[] sia di almeno 5 charcodice:temp->cod_4[4]=0; // Opzionale, di sicurezza ;) while( strlen(temp->cod_4)<4 ) { for( int i=4; i>0; i--) temp->cod_4[i] = temp->cod_4[i-1]; temp->cod_4[0]='0'; }![]()