String et Char
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

String et Char



  1. #1
    invited91dce06

    String et Char


    ------

    Bonjour, voila j'ai un tableau de caractere comme ceci
    Code:
    unsigned char Tab[4] = {0};
    Tab[3] = '\0'; // pour pouvoir plus tard afficher en chaine comme ceci
    printf("%s \n", Tab);
    j'aimerais savoir si il etait possible de faire une fonction qui retourne un string de ce genre

    Code:
    return Tab // le meme Tab qu'en haut

    -----

  2. #2
    invited91dce06

    Re : String et Char

    quand j'essai ca, j'ai une eurreur du type
    invalide conversion from unsigned char to const char*

  3. #3
    invite1c6b0acc

    Re : String et Char

    Bonjour,

    Il manque un peu d'informations ...
    Le message "invalid conversion from unsigned char to const char*" ne peut pas se produire sur la ligne "return Tab" puisque Tab est de type "unsigned char *" et non "unsigned char". Ça aurait un sens si tu retournait Tab[0] ou *Tab ...

    D'autre part, si le tableau Tab est déclaré dans la fonction, c'est une variable automatique, c'est à dire allouée à l'entrée de la fonction et libérée à la sortie.
    Donc, ta fonction retournerait un pointeur vers une zone de mémoire non allouée, ce qui est très très mauvais (cette zone mémoire contient effectivement ta chaîne mais sera modifiée dès que tu appelleras une autre fonction).

    Pour retourner un pointeur vers une zone mémoire, il faut que son allocation perdure à la fin de la fonction
    - soit en la déclarant static : static unsigned char Tab [4];
    - soit en la déclarant en dehors de la fonction (variable globale)
    - soit en l'allouant dynamiquement : unsigned char * Tab = malloc (4);

    Mais il ne faut jamais retourner l'adresse d'une variable automatique.

    A+

  4. #4
    invited91dce06

    Re : String et Char

    merci de m'avoir répondu

    j'ai fais une eureur en copiant l'eureur . voila
    invalide conversion from unsigned char* to const char*
    la j'essaie de testé ca pour transformé en "vrai" string le tableau de char

    stringstream ss;
    string lestring;
    for(i=0;i<tablen;i++){
    ss.str("");
    ss << Tab[i];
    lestring += ss.str();
    }

    return lestring;

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

    Re : String et Char

    Dans ton dernier exemple, il n'y a plus de problème avec le return : cette fois tu retourne un objet, et il sera recopié lors de l'affectation resultat = fonction (...);
    C'est un peu lourd (de recopier l'objet), mais ça doit marcher.

    Pour transformer un tableau de char en string, il existe un constructeur string (const char* s) prévu pour.
    Voir classe string.

    Sinon, le fait de retourner un pointeur vers une chaîne est parfaitement correct, tant que la chaîne reste allouée.

  7. #6
    Dlzlogic

    Re : String et Char

    Petit avis personnel, pourquoi utiliser des trucs compliqués du C++ alors que c'est relativement basic en C, par exemple
    Code:
    char *FonctEss(int MAX)
    {
      if (MAX > 127)
      {
        printf("ERREUR\n");
        return NULL;
      }
      static LaChaine[128];
      int M=20;
      for (int i = 0; i<M; i++)
      {
        LaChaine[i] = i + 48;
      }
      LaChaine[M]='\0';
      return LaChaine;  
    }
    
    // utilisation, supposons LeString déclaré
      LeString=string(LaChaine);   // à la syntaxe près

Discussions similaires

  1. char rc
    Par invite316acf12 dans le forum Électronique
    Réponses: 10
    Dernier message: 29/07/2010, 23h56
  2. [C]-Conversion Int -> Char, Float -> Char, ...
    Par invite3c35244f dans le forum Électronique
    Réponses: 2
    Dernier message: 25/06/2008, 12h05
  3. probleme String
    Par invitec35bc9ea dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 25/05/2007, 13h24
  4. String c
    Par invitea121f130 dans le forum Logiciel - Software - Open Source
    Réponses: 7
    Dernier message: 13/03/2007, 06h11
  5. cosmic string
    Par invite73114de8 dans le forum Archives
    Réponses: 11
    Dernier message: 01/02/2006, 13h37