IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Chaînes de caractères


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 899
    Par défaut Chaînes de caractères
    bsr à tous , j'ai un problème en c avec les chaines de caractères car j'utilise sprintf pour concaténer 2 chaines que je veux écrire dans un fichier il me l'écrit bien mais pas à la suite l'une de l'autre voiçi le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
                 char num_eq[2];  /* mes chaines*/
                 char ch_pid[5];
                 char total1[7];
                 ****************************************
                  sprintf(ch_pid,"%d\n",pr[i].id);
                  sprintf(num_eq,"%d\n",pr[i].num_equipe);
                  sprintf(total1,"%s%s\n",num_eq,ch_pid);
                  fic=fopen(final,"ab"); 
                  if (fic==NULL) printf("problème ouv %s\n",final);
                  if (ecrit=fwrite(total1,sizeof(total1),1,fic)<1) printf("problème écriture dans %s\n",final);
                  fclose(fic);
    Je pense à la fin de chaine "\0" qui doit poser problème mais je ne sais pas comment y remédier, si quelqu'un pouvait m'aider Merçi à tous !!!

  2. #2
    Membre éprouvé Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Par défaut
    Salut

    tu dois pouvoir simplifier un peu tout ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    char total1[ 32 ];
    *total = '\0'; // ou total[ 0 ] = '\0'; c'est pareil
    ****************************************
    sprintf(total1,"%d%d\n",pr[i].id,pr[i].num_equipe);
    fic=fopen(final,"ab");
     
    if (fic==NULL) printf("problème ouv %s\n",final); //si le fichier est NULL faudrait arreter et sortir de la fonction
    if (ecrit=fwrite(total1,sizeof(total1),1,fic)<1) printf("problème écriture dans %s\n",final);
    fclose(fic);

  3. #3
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,
    Ton code fait bien ce que tu lui demande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sprintf(ch_pid,"%d\n",pr[i].id);
    sprintf(num_eq,"%d\n",pr[i].num_equipe);
    De plus, attention aux tailles des tableaux de caratères. Dans char num_ep[2], on ne pourra stoquer qu'un caratères + un signe de fin de chaine.

    Donc dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sprintf(num_eq,"%d\n",pr[i].num_equipe);
    on écrit le caractère '\0' après le tableau, c'est à dire n'importe où.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 899
    Par défaut
    Citation Envoyé par mabu Voir le message
    Bonjour,
    Ton code fait bien ce que tu lui demande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sprintf(ch_pid,"%d\n",pr[i].id);
    sprintf(num_eq,"%d\n",pr[i].num_equipe);
    De plus, attention aux tailles des tableaux de caratères. Dans char num_ep[2], on ne pourra stoquer qu'un caratères + un signe de fin de chaine.

    Donc dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sprintf(num_eq,"%d\n",pr[i].num_equipe);
    on écrit le caractère '\0' après le tableau, c'est à dire n'importe où.
    bjr, merçi pour ton aide l'écriture se fait bien maintenant, par contre la lecture ne marche pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    size_t lit; /* ma variable lit */
    /****************************************/
    fic=fopen(final,"rb"); 
                  if (fic==NULL) printf("problème ouv %s\n",final);      
                  printf("total1 ap ouv 2 = %s\n",total1);              
                  /*do
                    {*/
                      if (lit=fread(total1,sizeof(total1),1,fic)<1) printf("problème lecture dans %s\n",final);
                       printf("lit = %d\n",lit);printf(strerror(errno));
    la variable lit retourne 0 et j'ai le message suivant :
    "invalid or incomplete multibyte or wide character" Si tu peux m'aider merci A +

  5. #5
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations forums :
    Inscription : Août 2007
    Messages : 6
    Par défaut
    Si tu cherches à concaténer 2 chaines, il y a la fonction strcat

    Pour l'utiliser, il faut ré-allouer ta chaine principale de la taille de la chaine_principale + chaine_suite.

    exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    char *str = strdup("ceci est un");
    char str2[] = "test";
     
    if(NULL == (str = realloc(str, sizeof(char) * (strlen(str) + strlen(str2) + 1))))
    {
       /* Au cas où  */
    }
     
    else
       str = strcat(str, str2);

Discussions similaires

  1. Réponses: 8
    Dernier message: 12/02/2013, 01h08
  2. Réponses: 2
    Dernier message: 18/10/2003, 14h42
  3. Chaînes de caractères
    Par Zazeglu dans le forum C
    Réponses: 3
    Dernier message: 28/08/2003, 16h20
  4. Inverser une chaîne de caractères
    Par DBBB dans le forum Assembleur
    Réponses: 2
    Dernier message: 30/03/2003, 11h09
  5. Réponses: 3
    Dernier message: 09/05/2002, 01h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo