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 :

la fonction strcat: j'ai beau chercher, je bloque


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 90
    Par défaut la fonction strcat: j'ai beau chercher, je bloque
    bonjour,

    j'ai beau réfléchir ou essayer des choses comme un bourrin sans réfléchir, ou encore chercher (et trouver) sur le net comment on utilise strcat, y'a pas, je reste bloqué depuis vraiment longtemps, donc je me permets de vous soumettre mon problème, qui est très simple: définir deux chaines de caractères et les concaténer (j'ai honte)....

    je sais comment on fait (en théorie), je sais que strcat est de type char *, qu'elle prend un char *s1 et une chaine constate s2 et qu'il renvoie s1 à laquelle on a ajouté s2, mais malgrè ça, j'essai et mon programme C plante lamentablement à cette opération....Et pourtant comme je l'ai dit, j'ai tout essayé (enfin, il me semble !), des pointeurs, des pas pointeurs, de tout, rien à faire, soit ça marche pas, soit j'ai un warning "assing arg 1 of `strcat' makes pointer from integer without a cast ", soit "assignment makes integer from pointer without a cast ", soit ça plante le prog...

    Quelqu'un peut-il me montrer un exemple de deux lignes qui fonctionne que je vois où peut bien être mon problème ?

    merci beaucoup

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Le mieux serait encore que tu nous montre ton code en question avec en plus tes déclaration/allocations de pointeurs, tes tableaux ... la totale quoi. Ta chaîne cible est au moins assez grande pour accueillir la seconde chaîne ?
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 90
    Par défaut
    ben disons que comme j'ai essayé 30000 choses, je sais plus quoi vous soumettre ...
    Le truc le plus bête que j'ai envie de faire est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    char *s1;
    char *s2;
    char *s3;
    s1="toto";
    s2="titi";
    s3=strcat(&s1,&s2);
    Je sais bien qu'il faut que s3 soit assez grande pour acceuillir s1+s2, j'ai essayé de définir des char s1[100] etc, mais là je peux même pas faire une affectation du genre s1="toto", ça veut pas...j'ai essayé tout ce que j'ai pu, mais à chaque fois j'ai soit des erreurs (comme j'ai dit dans mon premier post), soit ça plante le prog).

    edit: le code que je vous ai soumis ne plante pas mais me sort un warning sur les types des arguments s1 et s2 et le résultat est n'importe quoi

  4. #4
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par casier
    Je sais bien qu'il faut que s3 soit assez grande pour acceuillir s1+s2
    Heu ouais mais tu sais peut-être pas qu'il faut allouer un espace assez grand (longueur de s1+s2+1) à s3 pour pouvoir accueillir la concatenation ! D'ailleurs s3 doit également être le premier argument de strcat !

    Voir : strcat pour lplus d'informations sur la fonction !


    De plus:
    vu que tu utilises déjà des pointeurs, il faut passer le pointeur et non pas leur adresse !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 90
    Par défaut
    si, j'avais cru comprendre qu'il fallait un +1 pour le caractère de fin, mais là j'ai fait large: de taille 100 alors que s1+s2 est plus petit.
    J'ai essayé de faire s2=strcat(&s2,&s1), mais ça marche pas non plus, ça plante pas mais le résultat est débile, c'est pas du tout ce qu'on peut attendre...

    lorsque je ne mets pas le & (je suis d'accord avec toi: il ne le faut pas...), le programme plante cash, c'est pour ça que j'ai essayé un peu tout et n'importe quoi

  6. #6
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par casier
    si, j'avais cru comprendre qu'il fallait un +1 pour le caractère de fin, mais là j'ai fait large: de taille 100 alors que s1+s2 est plus petit.
    J'ai essayé de faire s2=strcat(&s2,&s1), mais ça marche pas non plus, ça plante pas mais le résultat est débile, c'est pas du tout ce qu'on peut attendre...
    Voici un exemple vite fait qui fonctionne:
    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
     
    int main (void)
    {
       char * s1 = "toto";
       char * s2 = "titi";
       char * s3 = NULL;
     
     
       s3 = malloc (strlen (s1) + strlen (s2) + 1);
     
       if (s3 != NULL)
       {
          strcpy (s3, s1);
          strcat (s3, s2);
       }
     
       printf ("%s\n", s3);
       free (s3);
       s3 = NULL;
     
     
       return EXIT_SUCCESS;
    }
    Je pense que là tu as tout en main pour réussir
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  7. #7
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par casier
    le code que je vous ai soumis ne plante pas mais me sort un warning sur les types des arguments s1 et s2 et le résultat est n'importe quoi
    Normal. Il invoque plusieurs comportements indéfinis.

    strcat(), c'est pas bien difficile. Le but est "d'ajouter" une chaine à une chaine existante. Il faut simplement connaitre les contraintes du C, à savoir :
    - Une chaine est un tableau de char initialisé avec une séquence de caractères terminée par un 0.
    - une chaine dites 'littérale' n'est pas modifiable.

    le premier paramètre de strchar() est l'adresse du premier élément du tableau de char de destination. A l'évidence, il doit être modifiable. de plus, comme on ajoute à de l'existant, il faut qu'il y ait un existant, c'est à dire une chaine initiale (même vide) dans le tableau de destination. A l'évidence, il faut aussi qu'il y a ait de la place pour le suite.

    le deuxième paramètre est l'adresse du premier élément de la chaine à ajouter. Celle-ci n'est que lue, elle peut donc être non-modifiable.

    Tu n'as plus qu'à écrire le code.

  8. #8
    Membre Expert
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Par défaut
    Bonjour,

    Montre-nous ton code et on te dira où se trouve ton problème.


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Langage] probleme de pointeur pour la fonction strcat
    Par claire_cartier dans le forum Langage
    Réponses: 5
    Dernier message: 19/11/2008, 17h22
  2. Recréer la fonction strcat
    Par black_hole dans le forum Débuter
    Réponses: 8
    Dernier message: 27/03/2008, 00h18
  3. Problème avec la fonction strcat
    Par saddamtohmto dans le forum MATLAB
    Réponses: 10
    Dernier message: 18/07/2007, 07h57
  4. Problème avec la fonction Strcat
    Par totoc1001 dans le forum MATLAB
    Réponses: 6
    Dernier message: 29/01/2007, 21h34
  5. Pb avec fonction strcat ?
    Par olivier857 dans le forum Réseau
    Réponses: 44
    Dernier message: 31/03/2006, 12h00

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