Bonjour,
J'ai lus le chapitre sul les chaines de caractères. A la fin mateo propose de refaire les fonctions qu'il vient de montrer de string.h. Moi en bon zero je le fais et là probleme. Depuis quatre jours j'essaye de refaire les fonctions strcpy et strchr et je n'y arrive pas. J'ai beau retourner le probleme dans tout les sens à chaque fois ça ne marche pas. Si vous pourriez m'aider en me donnant une piste ou autre ce serait gentils. Merci.
P.S: on ecrit "ce" ou "çe" j'ai un doute tout d'un coup
Voila j'en ai tester plein d'autre mais je vous montre celui la qui marche pas.
Ok. Le problème est simple. Il te manque la théorie.
Le chaines en C sont définies de la façon suivante :
Tableau de char initialisé avec des caractères et terminé par un 0.
Par exemple :
char s[] = "hello"
est en fait
char s[] = {'h'‚'e'‚'l'‚'l'‚'o'‚0};
D'une façon générale, il n'y a pas d'opérateur en C pour copier des tableaux.
Pour copier une chaine (qui est un tableau de char), il faut donc copier chaque élément un par un. Les éléments étant des types simples, on peut utiliser l'opérateur d'affectation '='.
En effet, tu vas devoir copier chaque caractère un par un à l'aide d'une boucle. Relis bien le cours pour savoir quoi mettre dans la boucle et quand l'arrêter.
Autre petit conseil pas important : évites de nommer ta fonction strcpy, ça pourrait poser des problèmes, nommes la plutôt my_strcpy comme ça t'auras pas de conflits au linker ou autres trucs du genre
Pas très clair... Une fonction peut renvoyer une adresse si son retour est de type pointeur. Pour être exploitable, cette adresse doit être valide après exécution de la fonction. (Ce qui exclue évidemment l'adresse d'un variable locale).
Merci. Ca marche impecable.
Mais je pose donc la question suivante:
Comment ceux qui ont ecris la fonction on put prevoir la taille de la chaine, car moi j'ai fais ça:
téoriquement ce brobleme est deja abordé si tu as lu le cours sur les tableau de mateo notament si tu a fait l'execrcice n°3 portant sur la poy de tableau
Et je voudrais savoir, quand je tape #include <string.h>, normalement je suis sensé donner a l'ordinateur les parametres de la fonctions que je vais utilisé(disons strchr) mais quand je fais:
suiteChaine = strchr(chaine‚ 'd');
Comment peut il connaitre ce que la fonction fait puisque je lui ai juste "envoyer" les prototypes?
En incluant <string.h> le prototype est inclus dans ton fichier, donc le code peut être complier. Puis c'est le linker, qui va aller chercher le code de la fonction, déja compilée, pour la réunir avec ton fichier compilé et sortir le fichier exécutable.
Et pour le reste, il faut utiliser des boucles, ça sert à ça.
Mais je pose donc la question suivante:
Comment ceux qui ont ecris la fonction on put prevoir la taille de la chaine,
Le fonction de copie n'a pas besoin de prévoir la taille de la chaine. Il suffit de boucler en surveillant le caractère 0 qui marque la fin de la chaine.
Bonjour, c'est encore moi.
Après avoir éclater de joie quand j'ai réussi à écrire la fonction strcpy et que j'ai pus enfin comprendre ce qu'avait ressenti les personnes ayant programmer farcry quand leur jeux fut terminer , je me suis attaquer de suite à la fonction strchr. Mais là quel ne fut pas ma surprise quand je vis le main que proposait mateo21:
int main(int argc‚ char *argv[]) { char chaine[] = "Texte de test"‚ *suiteChaine = NULL;
suiteChaine = strchr(chaine‚ 'd'); if(suiteChaine != NULL)// Si on a trouvé quelque chose { printf("Voici la fin de la chaine a partir du premier d : %s"‚ suiteChaine); }
return0; }
J'aimerais savoir pourquoi, mis à part le premier "*suiteChaine", les autres ne possedait pas l'etoile "*".
Cela viendrait il de moi qui n'est pas bien suivit un chapitre(ce que je pense) ou bien y aurait il une faute de frappe(ce dont je doute).
Merci d'avance de vos réponses .
Tu as visiblement des lacunes théoriques en effet, je ne saurais trop te conseiller de relire le chapitre sur les pointeurs. T'y es passé trop vite alors que c'est très important, c'est clair et net.
Ne va pas plus loin tant que t'es pas sûr d'avoir bien compris les pointeurs.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
If you'd like to join us, read "How do we work at OpenClassrooms"! :)