Partage

strcpy FONCTIONNE PAS!

Sujet résolu
Le 17 juillet 2010 à 10:48:19

Bonjour,
Je suis le tuto de M@teo sur la programmation en C et j'en suis aux chaines de charactères. Je tente de recréer la fonction "strcpy" qui copie une chaine dans une autre. Lorsque ma chaine à copier ne contient que 7 caractères ou moins, ça fonctionne. Lorsqu'elle en prend plus, la copie contient le texte de la chaine a copier suivis de quelques caractères intrus. Quand je démarre le programme, les caractères intrus changent à chaque fois. Voici le code:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char* copie(char* copieDeLaChaine, const char* chaineACopier);
int main(int argc, char *argv[])
{
    char chaineACopier[] = "Salut toi", copieDeLaChaine[100];
    copie(copieDeLaChaine, chaineACopier);
    return 0;
}
char* copie(char* copieDeLaChaine, const char* chaineACopier)
{
    int i;
    for(i = 0; chaineACopier[i] != '\0'; i++)
    {
        copieDeLaChaine[i] = chaineACopier[i];
    }
    printf("%s", copieDeLaChaine);
    return copieDeLaChaine;
}


"Salut" aurait été affiché correctement mais "Salut toi" affiche quelque chose du genre "Salut toi/♥xï¤" ". Quand je le repars, il affiche "Salut toiyQEï¤" ".
Je ne comprends pas... Pouvez-vous m'aider s'il vous plait?
Publicité
Le 17 juillet 2010 à 10:48:19
Le 17 juillet 2010 à 10:51:38

fais char copideDeLaChaine[100] = {0} avant de faire quoi que ce soit !
Le 17 juillet 2010 à 10:51:53

Bonjour,

ta fonction ne copie simplement pas le caractère de fin de chaine, d'où les anomalies que tu rencontres.
Le 17 juillet 2010 à 10:54:42

char* copie(char* copieDeLaChaine, const char* chaineACopier)
{
    int i = 0;
    int tailleChaine = strlen(chaineACopier);

    while (i <= tailleChaine)
    {
        copieDeLaChaine[i] = chaineACopier[i];
    }
    printf("%s", copieDeLaChaine);
    return copieDeLaChaine;
}
Le 17 juillet 2010 à 10:57:16

L'appel à la fonction strlen est inutile, la boucle for utilisé par le PO convient très bien.
Le 17 juillet 2010 à 11:42:39

Salut,
Ayant moi aussi des soucis avec ces exercices, je vais essayé de répondre ! :)
Juste après ta boucle dans la fonction copie, tu as oublié d'ajouté le caractère de fin de chaîne,
c'est à dire '\0' !
Un petit oublie qui peut faire mal :colere2: !

Oups, j'ai voulu aller trop vite, quelqu'un avait déjà donné la bonne réponse :

Citation : Brugnar


Bonjour,

ta fonction ne copie simplement pas le caractère de fin de chaine, d'où les anomalies que tu rencontres.



Cru$ty
Le 18 juillet 2010 à 0:06:53

Merci pour vos réponses. Le fait de rajouter "char copideDeLaChaine[100] = {0}" a réglé le problème. ;)
Le 18 juillet 2010 à 0:15:14

Citation : dagp06

Merci pour vos réponses. Le fait de rajouter "char copideDeLaChaine[100] = {0}" a réglé le problème. ;)


Attention, ceci est une fausse solution.

Ta fonction tel qu'elle est actuellement ne fait pas son travail correctement. Tout comme strcpy, elle doit copier le caractère de fin de chaine.

Le fait d'initialiser copideDeLaChaine avec des valeurs nulles ne permet que de masquer le problème.

strcpy FONCTIONNE PAS!

× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
  • Editeur
  • Markdown