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 :

Insertion de <string.h>


Sujet :

C

  1. #21
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 44
    Par défaut
    l'erreur ne vient pas de là, parce que le meme message s affiche qd je fais appel à n imorte quelle autre fonction de string.h.

    Bref, j'ai fait une concatenation à la main, avec une boucle while en recopiant les caracteres du tableau à chaque fois..
    Mais ca reste bizarre quand meme!!

    En tous cas merci à tous !!

  2. #22
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 947
    Par défaut
    Tu peux montrer ce que tu as écrit ?
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #23
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 44
    Par défaut
    Citation Envoyé par Trap D
    Tu peux montrer ce que tu as écrit ?
    c'est pas bon
    quelqu un pourrait me guider sachant que je n'ai besoin de concatener qu une seule lettre à mon mot et que je ne peux pas utiliser les fonctions de string.h pour une raison que j ignore !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    #include<stdio.h>
    int main (void)
    { 
    int taille=7;
    char *mot;
     int i=0;
     mot=(char*)malloc(taille);
     if (mot==NULL)
       exit(1);
    mot="bonjou";
    while(mot[i]!='\0')
    i++;
    mot=realloc(mot,taille+1);
    mot[i]='n';
     mot[i+1]='\0';
    printf("%s",mot);
    return 0;
    }
    merci !

  4. #24
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Non mais c'est pas normal, tu n'as pas à te passer de string.h, réinstalles gcc, chais pas, essayes sous windows avec devc++

  5. #25
    Membre averti
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 44
    Par défaut
    j'ai trouvé l'erreur
    en fait, au debut de ma boucle mon tableau est vide, et j essaie de concatener une lettre à un tableau vide...

    je cherche mnt à tester si mon tableau est vide. si c'est le cas je fais sinon, je concatene.

    Comment tester s'il est vide?
    j ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if(mot[0]=='`0')
    strcat(mot,lettre);
    mais la condition est toujours realisee meme si le tableau n'est pas vide.

  6. #26
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Si ton tableau est vide?

    if(strlen(mot) == 0)

    ou bien

    if(mot[0] == 0) // ou == '\0'

  7. #27
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 947
    Par défaut
    Même erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     mot=(char*)malloc(taille);
     
     if (mot==NULL)
       exit(1);
    // ici tu perds l'adresse que tu viens d'allouer, 
    // pour donner à mot une adresse en mémoire non modifiable
    // mot="bonjou";
     
    // il faut faire
    strcpy(mot, "bonjou");
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  8. #28
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Citation Envoyé par felicity
    j'ai trouvé l'erreur
    en fait, au debut de ma boucle mon tableau est vide, et j essaie de concatener une lettre à un tableau vide...
    Ce n'est pas génant si ton tableau est initialisé (la première case contient le caractère de fin de chaîne '\0').

    Citation Envoyé par felicity
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #include<stdio.h>
    int main (void)
    { 
    int taille=7;
    char *mot;
     int i=0;
     mot=(char*)malloc(taille);
     if (mot==NULL)
       exit(1);
    mot="bonjou";
    while(mot[i]!='\0')
    i++;
    mot=realloc(mot,taille+1);
    mot[i]='n';
     mot[i+1]='\0';
    printf("%s",mot);
    return 0;
    }
    C'est ça le code qui plante je vais le garder dans ma collection personnelle, pour une fois qu'un comportement indéfini produit autre chose d'un seg fault, j'aime bien

    Un peu de lecture :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    #include<stdio.h>
    /* Il manque un fichier d'en tete pour malloc, realloc... */
    #include <stdlib.h>
    #include <string.h>
     
    int main (void)
    {
      int taille = 7;
      char *mot;
      int i = 0;
     
      /* Le cast est inutile voir deconseille */
      mot = /*(char *)*/malloc (taille);
      /* Un peu brutal
      if (mot == NULL)
        exit(1);*/
      if (mot)
      {
        /* Non ce n'est pas comme cela que l'on copie une chaine dans une variable
        mot="bonjou"; */
        strcpy (mot, "bonjou");
        while (mot[i] != '\0')
        {
          i++;
        }
        {
          void *tmp = NULL;
     
          /* realloc aussi peut echouer */
          tmp = realloc (mot, taille + 1);
          if (tmp)
          {
            mot = tmp;
            mot[i] = 'n';
            mot[i+1] = '\0';
            printf ("%s", mot);
          }
          else
          {
            free (mot), mot = NULL;
            fprintf (stderr, "Memoire insufisante");
            return EXIT_FAILURE;
          }
        }
        free (mot), mot = NULL;
      }
      else
      {
        fprintf (stderr, "Memoire insufisante");
        return EXIT_FAILURE;
      }
      return EXIT_SUCCESS;
    }

Discussions similaires

  1. Insertion d'une String dans un XML
    Par cyclopsnet dans le forum Format d'échange (XML, JSON...)
    Réponses: 7
    Dernier message: 22/05/2011, 04h23
  2. [ADO + D7] PBM insert strings - espaces superflus !?
    Par fredfred dans le forum Bases de données
    Réponses: 4
    Dernier message: 07/06/2006, 11h40
  3. Réponses: 2
    Dernier message: 12/05/2006, 23h01
  4. Réponses: 9
    Dernier message: 20/04/2006, 11h07
  5. Réponses: 6
    Dernier message: 07/04/2006, 18h23

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