mi sono accorto che quei warning li da solo se inserisco il file in un progetto, ecco perchè non li vedevo prima...
Quando crei un nuovo programma è ovvio che crei un nuovo progetto....
hai usato anche tu s3[k3++]=s1[k1], a te non dà il warning?
Ecco forse non mi sono spiegato...
io ho usato 2 variabili diverse.
cerco di spiegarmi,il compilatore diciamo che crea un codice assembly,ora cerco di farti capire cosa possa accadere con dello pseudocode:
codice:: A[i++]=B
;
il compilatore potrebbe fare:
METTOIN eax,A;
AGGIUNGO1 i;
ASSEGNOVALORE eax,B;
ma potrebbe anche fare:
METTOIN eax,A;
ASSEGNOVALORE eax,B;
AGGIUNGO1 i;
ma potrebbe fare anche in modo diverso,ovvero non è detto che i++ avvenga dopo l'assegnamento della variabile,potrebbe farlo anche in mezzo.
Mentre se usi due variabili diverse il problema non sussiste perchè anche se modfico l'indice il valore assegnato non cambia.
Come fai a conoscere i clicli senza conoscere il break e il continue?
Break interrompe il ciclo.
Continue esegue il sucessivo ciclo senza esaminare il codice:
int i,k;
for (i=0,k=0; i < 10; i++)
{
break;
++k;
}
in questo caso k==0 perchè appena entro nel ciclo esco con break.
int i,k;
for (i=0,k=0; i < 10; i++)
{
continue;
++k;
}
anche in questo caso k==0 perchè il continue passa al ciclo sucessivo senza analizzare il codice.
un esempio anche se bruttino può essere:
int i=-1;
while (1) // ciclo infinito
{
i++;
if (stringa[i] == 'a')
{
continue;
}
else if (stringa[i] == '\0')
{
stringaritorno[k]=stringa[i];
break;
}
else
{
stringaritorno[k++]=stringa[i];
}
}
anche se il codice è osceno si capisce che se trovo a salto tutto e rinizio il ciclo,se trovo fine stringa allora copio la fine ed esco altrimenti copio il carattere e avanzo il cursore.
La prima cosa che ho fatto da neofita(come lo siamo stati tutti) è stato nello scrivere subito il codice,creando grandissimi casini.
Poi ho imparato un trucco,prima scrivo in italiano quello che voglio fare,poi faccio un diagramma e alla fine il codice salta fuori da solo. E non scerzo!
IT::La stringa R è la copia di A che non ha i caratteri di B.
AVRò::
Funzione (Stringa R, Stringa A, Stringa B)
Per ogni carattere di Stringa A:
Per ogni carattere di Stringa B:
Controllo che non ci sia il carattere corrente di stringa A
Sucessivo
Se Il carattere di Stringa A non è in Stringa B Allora:
Stringa R=Stringa A,muovo stringa r
Sucessivo
Fine Funzione
questo ovvio che è solo un esempio, tu devi trovare la tua strada,tradurre poi da italiano a c o altro linguaggio diventa una cosa superflua.