Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    643

    [C] Problema a realizzare una propria versione della funzione strcpy

    Ciao,
    come esercizio ci hanno dato di realizzare una propria versione della funzione strcpy...io l'ho fatto in 2 modi diversi ma mi dà sempre lo stesso errore...ovvero al momento dell'esecuzione non mi visualizza nulla nella seconda stringa (quella in cui copio la prima)

    I due listati sono:

    PRIMO:

    codice:
    #include <stdio.h>
    
    void mystrcpy1(char [], char []);
    
    int main(){
    
    char str1[] = "Pippo";
    char str2[6];
    
    printf("La stringa contenuta in str1 è: %s\n", str1);
    
    mystrcpy1(str2, str1);
    
    printf("La stringa contenuta in str2 è: %s\n", str2);
    
    return 0;
    }
    
    void mystrcpy1(char s2[], char s1[]){
    
            int i = 0;
            while(s2[i] = s1[i] != '\0')
                    i++;
    }
    SECONDO:

    codice:
    #include <stdio.h>
    
    void mystrcpy2(char *, char *);
    
    int main(){
    
    char str1[] = "Pippo";
    char str2[6];
    
    printf("La stringa contenuta in str1 è: %s\n", str1);
    
    mystrcpy1(*str2, *str1);
    
    printf("La stringa contenuta in str2 è: %s\n", str2);
    
    return 0;
    }
    
    void mystrcpy2(char *s2, char *s1){
    
            while((*s2 = *s1) != '\01){
                    s++;
                    t++;
            }
    }
    Grazie
    Andrea

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    12
    codice:
    void mystrcpy1(char s2[], char s1[])
    {
            int i=0;
            while(s1[i]!='\0') s2[i]=s1[i], i++;
            s2[i]='\0';
    }
    codice:
    void mystrcpy2(char *s2, char *s1)
    {
    
            while(*s1)
            {
                    *s2=*s1;
                    *s1++;
                    *s2++;
            }
            *s2=0;
    }

  3. #3
    La funzione strcpy è carina da realizzare con i puntatori, come già proposto

    Propongo una soluzione più contratta:

    codice:
    void strcpy(char *s, const char *t) {
          while (*s++=*t++) != '\0')
                ;           /* significa che non ci sono istruzioni all'interno del ciclo */
    } /* strcpy */

  4. #4
    Volendo ottenere un codice ancora più compatto possiamo scrivere:
    codice:
    void strcpy(char *s, char *t) 
    {
          while (*s++=*t++) 
                ;           /* significa che non ci sono istruzioni all'interno del ciclo */
    }

  5. #5
    Originariamente inviato da ciromosketta
    scusatemi, ma queste funzioni che avete scritto aggiungo il carattere di terminazione di stringa? a me pare di no, o sbaglio?
    Non è la funzione strcpy che mette il terminatore.

  6. #6
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    No, non aggiungono il terminatore, in realtà non fa altro che continuare a copiare i caratteri nel primo char finchè non si raggiunge il terminatore nullo
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  7. #7
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Pratico esempio:

    str1[4] = C i a o /0
    ---------0 1 2 3 4

    str2[2] = I o /0
    ---------0 1 2

    Utilizzando strcpy su queste due stringhe, otterremo

    C i a o i o /0
    Perchè?
    Strcpy comincia la copia dal terminatore null della prima stringa, e copia TUTTA la secnda stringa, incluso il suo terminatore.
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2004
    Messaggi
    643

    mia versione della strcpy...può andar bene?

    All'università ci hanno dato da fare come esercizio una nostra personale versione della funzione strcpy..ovvero un programma che presa in input una stringa la copia in un'altra stringa....per voi può andar bene questo risultato?

    codice:
    #include <stdio.h>
    
    void  mystrcpy(char *, char *);
    
    int main(){
            char str1[20];
            char str2[20];
    
            printf("Inserire una stringa di al più 20 caratteri: ");
            scanf("%s", str1);
    
            mystrcpy(str2, str1);           // Copia str1 in str2
    
            printf("La stringa str2 contiene al suo interno: %s\n\n", str2);
    
            return 0;
    }
    
    void mystrcpy(char *a, char *b){        // Riceve il puntatore al primo elemento di ambedue le stringhe
    
            int count = 0;
    
            while(b[count] != '\0'){
                    a[count] = b[count];
                    count ++;
            }
    
            count++;
            a[count] = '\0';
    }
    Grazie
    Andrea

  9. #9
    Utente di HTML.it L'avatar di DydBoy
    Registrato dal
    Jul 2005
    Messaggi
    165

    Re: mia versione della strcpy...può andar bene?

    codice:
    
    void mystrcpy(char *a, char *b){        
            
    int count = 0;
    
    do {
           a[count] = b[count];
       } while (b[count++] != '\0')
    
    }
    Non sono sicuro ma dovrebbe andare...

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    codice:
    void mystrcpy(char *a, char *b)
    {
        while(*a++=*b++);
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.