trfghfhfhanspjkhgfhgfjgarencies cgfdgfaden es

Upload: soarecemurat

Post on 06-Jan-2016

216 views

Category:

Documents


0 download

DESCRIPTION

khjlkljlgjhkhj hlkjhlhjfhgjjkjh hklgj f jhg k hkl fgjfgkhjlhl hkñ

TRANSCRIPT

  • Manipulaci de cadenes(un resum de confusions de companys vostres)

    Llus Garrido i scar Amors

    Grau dEnginyeria Informtica

    Llus Garrido i scar Amors Manipulaci de cadenes

  • Manipulaci de cadenes

    La prctica requereix manipular cadenes de carcters.En C les cadenes de carcters funcionen de forma diferent a lescadenes del llenguatges com Python o Java.En particular

    Tota cadena ha destar finalitzada amb el byte zero (carcter\0). Moltes funcions de la llibreria C ho assumeixen perfuncionar correctament.Una cadena no s un objecte i cal anar amb compte ambcerts tipus de manipulacions (exemples a les segentstransparncies).

    #include

    int main(void){

    char a[14] = "Bon dia!";

    printf("%s", a);

    return 0;} a

    B o n d ai ! \0

    0 1 2 3 4 5 6 7 8 9 10 11 12 13

    Llus Garrido i scar Amors Manipulaci de cadenes

  • Manipulaci de cadenes

    Aquest codi no funcionar (per compila!). Per qu ?

    #include #include

    char *genera_cadena(){char str[100];

    // Processa

    return str;}

    int main(void){char *cadena;

    cadena = genera_cadena();

    // Processa}

    En retornar de genera_cadena la cadena str es destrueix.

    Llus Garrido i scar Amors Manipulaci de cadenes

  • Manipulaci de cadenes

    Aquest codi no funcionar (per compila!). Per qu ?

    #include #include

    char *genera_cadena(){char str[100];

    // Processa

    return str;}

    int main(void){char *cadena;

    cadena = genera_cadena();

    // Processa}

    En retornar de genera_cadena la cadena str es destrueix.

    Llus Garrido i scar Amors Manipulaci de cadenes

  • Manipulaci de cadenes

    La forma correcta dimplementar la funcionalitat anterior s

    #include #include

    char *genera_cadena(){char *str = malloc(100 * sizeof(char));

    // Processa

    return str;}

    int main(void){char *cadena;

    cadena = genera_cadena();

    free(cadena);}

    Observar que la cadena subica i sallibera en dues funcionsdiferents.

    Llus Garrido i scar Amors Manipulaci de cadenes

  • Manipulaci de cadenes

    Altres formes dimplementar-ho sn aquestes

    #include #include

    void genera_cadena(char *str){// Processa

    }

    int main(void){char *cadena;

    cadena = malloc(100 * sizeof(char));

    genera_cadena(cadena);

    free(cadena);}

    #include #include

    void genera_cadena(char *str){// Processa

    }

    int main(void){char cadena[100];

    genera_cadena(cadena);

    }

    Llus Garrido i scar Amors Manipulaci de cadenes

  • Manipulacions de cadenes

    Com sinicialitza de forma correcta una cadena ?

    #include #include

    int main(void){char *cadena;

    cadena = malloc(100 * sizeof(char));

    // No es la forma correcta d'inicialitzar!cadena = "";

    // La forma correcta d'inicialitzar esstrcpy(cadena, "");

    // O be tambecadena[0] = '\0';

    }

    Llus Garrido i scar Amors Manipulaci de cadenes