Forum Programmation.c copie de chaîne de caractère

Posté par  .
Étiquettes : aucune
0
4
mai
2005
salut à tous

Je voudrais savoir comment copier une chaîne de caractère et le coller dans un char[]

exemple :
char texte[256];
&texte="voila le texte que je veut ajouter";

Cette méthode ne fonctionne pas.

Quelqu'un aurait t-il le moyen ou la méthode pour effectuer cette opération ????

strcpy????
j'ai déjà essayer et il ne veut pas ! pourquoi ?????
  • # Salut

    Posté par  . Évalué à 3.

    char test[]="ceci est une chaine de caracteres ?";

    Est ce que ca correspond à ce que tu attends ?
    • [^] # Re: Salut

      Posté par  . Évalué à 1.

      Ca ne serais pas plutôt :
      char test[]= b>{ "machaîne" };

      et cela ne fonctionne seulement pour l'initialisation.
      Enfin je crois. J'avais testé il y a longtemps et pour moi ca ne marchais pas; et je n'ai pas réessayer depuis......

      Je voudrais pouvoir changer le texte autant de fois que je le veux.
      Je te remercie quand même, et j'ai trouver mon bonheur ci dessous!!!!

      Merci à tous.
  • # strncpy

    Posté par  . Évalué à 3.

    char text[256];
    strncpy(text,"mon texte a mettre dans le tableau",256);

    vaut mieux utiliser strncpy qui peut limiter le nombre de caracteres a coller dans ton tableau de char plutot qui strcpy qui t'enmenera surement vers un segmentation fault si la chaine a coller est plus grande que le tableau

    en ésperant que ca t'a aidé
    • [^] # Re: strncpy

      Posté par  (site web personnel) . Évalué à 3.

      dans l'exemple que tu donnes aussi: si la chaine est plus longue, le caratère NUL final saute, et une fonction sur les chaines ne saura plus où elle se termine. C'est pour éviter ce type d'erreur que les BSD ont strlcpy.

      char text[256];
      strncpy(text,"mon texte a mettre dans le tableau",255);
      text[255] = 0;
      • [^] # Re: strncpy

        Posté par  . Évalué à 1.

        dans ce cas, snprintf peut faire l'affaire :

        char text[256]

        snprintf(text, sizeof(text), "%s", "mon texte à ...");

        pas de risque de débordement, et on es sur d'avoir le caractère NUL en fin de chaine.
        • [^] # Re: strncpy

          Posté par  (site web personnel) . Évalué à 2.

          C'est parfaitement exact, néanmoins je trouve cette solution moins "belle":
          - on voit moins immédiatement ce qui se passe;
          - l'utilisation de snprintf est "overkill", et l'exécution est plus longue (je sais, sur les processeurs actuels on le voit pas, mais c'est ce genre de choses qui fait que les programmes sont toujours aussi lents en dépit des machines qui accélèrent). Cf l'implémentation dans la libc de ton choix.

          Je reconnais que cela reste assez subjectif.
    • [^] # Re: strncpy

      Posté par  (site web personnel) . Évalué à 2.

      Moi je dirais:
      strncpy(text," le texte",sizeof(text);

      Le sizeof() permet de s'assurer que tu copie bien la taille de text.
      Si tu change le text[256] en text[2] tu aura pas a changer tous les strncpy.
      Il faut eviter toute valeur numérique en brut sujette à changement.

      Utilise au maximum les sizeof et autres #define.

      #define TAILLETEXTE 256
      char text[TAILLETEXTE];
      strncpy(text,"mon texte a mettre dans le tableau",TAILLETEXTE );

      la cest plus propre:D
      • [^] # Re: strncpy

        Posté par  . Évalué à 2.

        Je vous remercie tous pour vos réponses massives.

        Ca marche!!!
  • # glib

    Posté par  . Évalué à 2.

    Y a tellement moyen de se tirer dans le pied avec les fonctions standards de la libc, et elles sont tellement limitées que je ne saurais que trop conseiller d'utiliser la glib (g_strdup et g_strdup_printf en particulier.
  • # Plus fondamental !

    Posté par  . Évalué à 2.

    Les réponses qui t'ont été données sont correctes, spécialement lorsque l'on te dit d'utiliser des constantes symboliques (par exemple TAILLETEXTE).

    Mais j'aimerais aller un peu plus au fond des choses.

    Lorsque tu écris:

    char texte[256;]


    Tu définis deux choses pour le compilateur:
    1) Une zone mémoire de 256 char
    2) Un identificateur texte qu'en première analyse (pour faire simple) tu peux assimiler à une constante de type pointeur sur char qui pointe sur la zone définie.

    Lorsque tu écris:

    &texte="voila le texte que je veut ajouter";


    Tu tentes d'affecter à l'adresse de la constante texte , l'adresse d'une autre constante ("voila le texte que je veut ajouter"), le compilateur ne devrait pas être franchement d'accord..

    Amha, une bonne solution, robuste, devrait être:

    #define TAILLETXT 256
    char texte[TAILLETXT];
    ...
    strncpy(texte,"voila le texte que je veut ajouter",TAILLETXT-1);
    texte[TAILLETXT-1] = 0x00;

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.