Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

String c



  1. #1
    sahdow

    String c


    ------

    bonjour
    je travaille un sur programe code en c
    qui utilise des String
    qui sont represente de deux maniere
    un tableau de char
    et un pointeur vers char
    et ca me pose des problemes au niveau
    de la compatibilte
    si vous avez des idees qui peuvent m'aider n'hesiter pas
    merci

    -----

  2. Publicité
  3. #2
    Coincoin

    Re : String c

    Salut,
    Il y a deux choses différentes : les string et les char*. Les strings s'obtiennent avec un include<string> et ont des fonctions associées bien pratiques. Les char* sont plus basiques mais plus simples.

    Par contre, un tableau de caractères (genre char toto[256]) est la même chose qu'un char*.

    Tu peux détailler les problèmes que tu as ?
    Encore une victoire de Canard !

  4. #3
    sahdow

    Re : String c

    j'ai un type dans l'un des chanps est un tableau
    de char
    et je veux lui affecte un pointeur de char
    typedef struct s{
    char name[MAX_NAME];
    struct s* next;
    struct s* prev;
    } se;
    se* create_element(char *a_name) {
    if(strlen(a_name)>MAX_NAME) return NULL;
    else{
    list_elem_t *resul=malloc(sizeof(se));
    resul->next=NULL;
    resul->prev=NULL;
    resul->name=a_name;
    return resul;
    }

    alors j'ai une erreur du compilateur
    icompatible type sur la ligne marque

  5. #4
    sahdow

    Re : String c

    ce que j'ai remarquer c'est que
    l'assigement
    char[a]---->char*
    marche
    par contre
    char*---------->char[a] ne marhe pas
    une idee? pour contourner cela par une conversion de types
    ou................?

  6. A voir en vidéo sur Futura
  7. #5
    fderwelt

    Re : String c

    Bonjour,

    La déclaration
    char s[...]
    définit s comme l'adresse du premier élément du tableau. C'est donc un pointeur sur char, autrement dit un char*. Dans l'autre sens ça ne peut pas marcher, puisqu'un char* n'a pas de taille (nombre d'éléments) associée. En toute rigueur ce devrait être possible (la notation s[] n'étant qu'une commodité d'écriture dans les premières versions des compilos C style K&R) mais conceptuellement c'est plus propre. Encore que...

    -- françois
    Les optimistes croient que ce monde est le meilleur possible. Les pessimistes savent que c'est vrai.

  8. #6
    Gre

    Re : String c

    François a donné les éléments de réponse mais j'aimerais apporter quelques points

    Sahdow tu aurais pû faire deux efforts:
    - le premier c'est de présenter un code élegant (donc d'utiliser la balise code, indentation etc.) avec des noms de variables un tantinet significatifs (merci)
    - le deuxième c'est d'expliciter mieux ta question.

    Voici ce que je comprends.
    Tu as déclaré ceci
    Code:
    char* chaine1 = (char*) malloc(10*sizeof(char));
    char chaine2[10];
    Tu les as initialisé et tu as essayé cela
    Code:
    chaine1 = chaine2;
    ce qui marche. Puis tu as essayé ceci
    Code:
    chaine2 = chaine1;
    qui ne marche pas.

    Les deux sont des pointeurs mais le deuxième est un pointeur qui indique une taille (char[100])
    Ceci se voit bien si tu compiles en C++.

    Code:
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    
    int main (int argc, char *argv[])
    {
        char *chaine1 = (char*) malloc(10*sizeof(char));
        char chaine2[10];
    
        strcpy(chaine1, "allo");
        strcpy(chaine2, "au revoir");
    
        chaine2 = chaine1;
    
        printf("%s\n", chaine1);
        printf("%s\n", chaine2);
    
        return 0;
    }
    et à la compilation avec g++
    Code:
    garulfo@Archimede $ g++ prog.c 
    prog.c: In function ‘int main(int, char**)’:
    prog.c:13: error: incompatible types in assignment of ‘char*’ to ‘char [10]’
    Un cast ne peut pas marcher puisqu'il manque de l'information.

    Tu dois donc faire une copie ou ne travailler qu'avec des pointeurs char*.
    War does not decide who's right, but who's left. (Bertrand Russell)

  9. Publicité
  10. #7
    Pole

    Re : String c

    f(strlen(a_name)>MAX_NAME) return NULL;
    C'est mieux >= non?
    strlen renvoit le nombre de caractères sans le 0 alors que MAX_NAME oui.
    Pour comprendre la récursivité croisée, il faut comprendre les arbres d'appels. Et vice versa.

  11. #8
    Gre

    Arrow Re : String c

    Citation Envoyé par Pole Voir le message
    f(strlen(a_name)>MAX_NAME) return NULL;
    C'est mieux >= non?
    strlen renvoit le nombre de caractères sans le 0 alors que MAX_NAME oui.
    oui tu as raison...

    Quel plaisir de travailler avec ces merveilleux tableaux de caractères en C

    P.S. & H.S. Je crois que je viens de trouver mon smiley favori
    War does not decide who's right, but who's left. (Bertrand Russell)

Discussions similaires

  1. Decomposer une "string" en Maple
    Par dimofzion dans le forum Mathématiques du supérieur
    Réponses: 1
    Dernier message: 08/06/2007, 19h18
  2. probleme String
    Par ABN84 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 25/05/2007, 12h24
  3. rescapées des vacances: dentelles du string, dumbell (300d+merguez)
    Par astroJB dans le forum Matériel astronomique et photos d'amateurs
    Réponses: 12
    Dernier message: 03/09/2006, 20h20
  4. [String Theory] Lien interessant
    Par BioBen dans le forum Physique
    Réponses: 1
    Dernier message: 08/03/2006, 18h31
  5. cosmic string
    Par koyote dans le forum Archives
    Réponses: 11
    Dernier message: 01/02/2006, 12h37
Découvrez nos comparatifs produits sur l'informatique et les technologies.