[c] Puntatori, funzioni, copia stringhe

di il
2 risposte

[c] Puntatori, funzioni, copia stringhe

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.

2 Risposte

Devi accedere o registrarti per scrivere nel forum
2 risposte