Buonasera,
mi sto esercitando con puntatori e stringhe e sto scrivendo delle funzioni che, date due stringhe, copino la seconda nella prima. Questo il codice
//scrivere almeno tre differenti versioni di una funzione che effettui la copia di una stringa su un'altra.
//scrivere almeno tre differenti versioni di una funzione che effettui la copia di una stringa su un'altra.
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
void funzione_copia(char *s1, char *s2);
void funzione_copia2(char *s1, char *s2);
void funzione_copia3(char *s1, char *s2);
void funzione_copia4(char *s1, char *s2);
int main()
{
char stringa1[33]="Stringa1 contiene 1 1 1 1 1";
char stringa2[33]="String da copiare $ p";
char stringa3[33]="Stringa3 contiene 3 3 3";
printf("\n%s", stringa1);
funzione_copia(stringa1, stringa2);
funzione_copia2(stringa1, stringa2);
funzione_copia3(stringa1, stringa2);
funzione_copia4(stringa1, stringa2);
return 0;
}
/* UNO */
void funzione_copia(char *s1, char *s2)
{
strcpy(s1, s2);
printf("\n UNO " "%s", s1);
}
/* DUE NON FUNZIONA */
void funzione_copia2(char *s1, char *s2)
{
while((*s1=*s2) !='\0'){ s1++; s2++;}
printf("\n DUE " "%s", s1);
}
/* TRE NON FUNZIONA*/
void funzione_copia3(char *s1, char *s2)
{
while (*s1++ = *s2++);
printf("\n TRE ""%s", s1);
}
/* QUATTRO */
void funzione_copia4( char s[], char t[])
{
int i=0;
while ((s[i] = t[i]) != '\0') i++;
printf("\n QUATTRO ""%s", s);
}
Come si può vedere lanciando il programma, le funzioni DUE E TRE (funzione_copia2 e funzione_copia3) , entrambe copiate dalle soluzioni del libro degli esercizi, non funzionano. Perché?
Grazie
P.S Tra l'altro, se nella DUE si sostituisce while((*s1=*s2) !='\0'){ s1++; s2++;} con while((*s1=*s2) =='\0'){ s1++; s2++;} va tutto bene. Ma perché? Non capisco la logica.