× Aidez la recherche contre le COVID-19 avec votre ordi ! Rejoignez l'équipe PC Astuces Folding@home
 > Tous les forums > Forum Autres langages
 programmation des chaine de type car(C++)Sujet résolu
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
humanx
  Posté le 03/04/2008 @ 00:39 
Aller en bas de la page 
Petit astucien
Salut a tous les programmeurs
Voila je suis un étudiant débutant en informatique notre prof de programmation vient d’aborder le coure de la programmation des chaînes de type char en C++ est j’ai absolument rien comprit des se coure la.
Il nous a parlé de

Strlen(nom de chaine)
Strcpy (chaine2,chaine1)
Strcmp(chaine1.chaine2)
Et aussi strcat(chaine1,chaine2)

Svp si il y a quelqu’un qui peut me dire la signification de ses mot clé est quand et ou je peux mètre ses mot clé dans mes programme amateur pour aquérire la logique naisséser pour ne pas tombé sur des erreurs banal

Je vous en serait très reconnaissent de votre aide a mieux comprendre
Mercie de votre attention

J utilise le logiciel suivent (BORLAND C++)
Publicité
Draleg
 Posté le 03/04/2008 à 09:08 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Salut j'espere que ça t'aidera:

Strcmp(chaine1.chaine2); : Permet de comparer 2 chaine de caractere, cette fonction va donc analysé tout les caractere afin de savoir si les deux chaines sont identique. Elle retourne 0 si elles le sont, et un chiffre supérieur a 0 si elle ne le sont pas. (Remplace l' == qui n'est pas applicable dans les comparaison de chaines)

Strcpy (destination,source); : Permet de copier une chaine source dans une chaine destination. Tu peux lui ajouter une parametre qui signifiera le nombre de caractere que tu veux copier de la chaine source. (Remplace l' = qui n'est pas applicable pour la copie de chaines)

Strlen(chaine); : Retourne le nombre de caractere de la chaine.

Je te conseil ce ptit site: http://www.cplusplus.com/reference/clibrary/ qui referencie en grande partie des fonctions.



Modifié par Draleg le 03/04/2008 09:09
humanx
 Posté le 03/04/2008 à 17:55 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien
Draleg a écrit :

Salut j'espere que ça t'aidera:

Strcmp(chaine1.chaine2); : Permet de comparer 2 chaine de caractere, cette fonction va donc analysé tout les caractere afin de savoir si les deux chaines sont identique. Elle retourne 0 si elles le sont, et un chiffre supérieur a 0 si elle ne le sont pas. (Remplace l' == qui n'est pas applicable dans les comparaison de chaines)

Strcpy (destination,source); : Permet de copier une chaine source dans une chaine destination. Tu peux lui ajouter une parametre qui signifiera le nombre de caractere que tu veux copier de la chaine source. (Remplace l' = qui n'est pas applicable pour la copie de chaines)

Strlen(chaine); : Retourne le nombre de caractere de la chaine.

Je te conseil ce ptit site: http://www.cplusplus.com/reference/clibrary/ qui referencie en grande partie des fonctions.


Merci pour votre aide

Je vais lire le document cé bien expliqué

Merci

s4t4n
 Posté le 04/04/2008 à 22:23 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Bonjour

En C++ ? tu est sur ?

Le type char devient presque inutile en C++, avec l object string tu peut faire a peu pres ce que tu veux et avec une simplicité deconcertante.

humanx
 Posté le 05/04/2008 à 02:29 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien
Oui je suis sur

Je veux essayer de comprendre le char sous c++

Car c’est la premier fois que je comprends pas un coure on c++

En plus de ça notre prof nous a chargé de faire des exercices qui semble banal a réalisé

Mais mon souci c’est que je ne sais pas comment mi prendre



Modifié par humanx le 05/04/2008 12:27
s4t4n
 Posté le 05/04/2008 à 14:43 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

regarde:

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. int main()
  5. {
  6. char pseudo[] = "satan";
  7. int taille = 0;
  8. char buffer[30];
  9. /* pour recuperer la taille du pseudo */
  10. taille = strlen(pseudo);
  11. /* affiche le nombre de caractere de satan */
  12. printf("taille de pseudo: %d\n", taille);
  13. /* copie pseudo dans buffer */
  14. strcpy(buffer, pseudo);
  15. printf("buffer: %s\n", buffer);
  16. /* ajoute buffer a pseudo */
  17. strcat(buffer, pseudo);
  18. printf("buffer + pseudo: %s\n", buffer);
  19. return 0;
  20. }
  21. se qui donne:
  22. napoleon@debian:~$ gcc -o test test.c
  23. napoleon@debian:~$ ./test
  24. taille: 5
  25. buffer: satan
  26. buffer + buffer: satansatan

humanx
 Posté le 05/04/2008 à 16:05 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

merci

je vien de comprendre

s4t4n
 Posté le 05/04/2008 à 22:28 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

re

Par contre afin d eviter les buffer overflow tu devrais jamais te servir de strcpy

Je te laisse imaginer la sortie de ce morceau de code:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. int main()
  5. {
  6. char pseudo[] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
  7. char buffer[10];
  8. strcpy(buffer, pseudo);
  9. return 0;
  10. }

tu na aucun moyen de controler la taille.

La solution c est strncpy

char * strncpy ( char * destination, const char * source, size_t num );

tu rajoute la taille a la fin simplement.

koala01
 Posté le 19/05/2008 à 12:24 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Salut,

M'est avis que tu devrais eng ton prof pour encore oser parler des chaines "C style" (tableau de caractères terminé par un '\0') dans un cours de C++...

Du moins, tu devrais essayer (aussi gentiment que possible, étant donné que c'est lui qui a les rennes de tes résultats) de lui faire comprendre qu'il est largement déconseillé d'utiliser les fonctions et les possiblités issues du C quand une alternative existe en C++.

En effet, il faut prendre conscience du fait que, si une alternative propre au C++ à une possibilité issue du C existe, elle est globalement bien plus sécurisante à utiliser que la possibilité issue du C équivalente.

De plus, le C++ étant un langage orienté objet, dont l'objectif est aussi de permettre la réutilisation du code, il est particuliè!rement domage de se passer de ses atouts... surtout en période d'apprentissage: les mauvaises habitudes sont bien plus facile à prendre - et assez bizarement plus difficiles à perdre - que les bonnes et un apprentissage digne de se nom devrait quand meme essayer de donner les bonnes habitudes [clindoeil]

Enfin, bien que le C++ hérite directement du C et qu'il ne renie absolument pas ses origines, j'ai toujours considéré comme abherrant de partir du C pour essayer d'apprendre le C++, et, il se fait que, pour ce qui concerne la gestion de chaines de caractères, il existe une alternative de manière standard: la classe string, disponible dans l'espace de noms std par inclusion du fichier d'en-tête <string> et qui permet même d'obtenir une chaine de caractères C style en cas de besoin, tout en t'évitant les soucis dus à la gestion dynamique de la mémoire que l'on peut rencontrer en C.

@s4t4n>>Les codes que tu fournis sont peut être très beau et (comme je n'ai fait que les parcourir distraitement) peut être tout à fait justes en C, mais tu devrais aussi méditer sur ce que je viens d'écrire.

La principale preuve de ce que j'avance vient du fait que gcc va compiler les fichiers dont l'extension est *.c comme étant... des fichiers sources contenant du C et non du C++: Les extensions reconnues comme devant être compilées avec le compilateur C++ sont *.cpp, *.cxx et -sous unixoide uniquement (ou du moins les systèmes d'exploitations senibles à la casse pour les noms de fichiers, ce qui disqualifie windows) -*.C (en majuscule

En effet, les fichiers stdio.h, stdlib.h et string.h sont autant de fichiers d'en-tête issus du C dont l'usage n'est vraiment pas recommandé en C++.

Les deux premiers par exemple seraient avantageusement remplacés par le fichier <iostream> et, pour le dernier, reporte toi à ce qui est dit plus haut [clindoeil]

En effet, l'inclusion de <iostream> permet de disposer, entre autres, des classes cin pour les flux entrants (le clavier) et de cout pour les flux sortants (l'écran), toutes deux également disponibles dans l'espace de noms std.

Publicité
s4t4n
 Posté le 20/05/2008 à 19:16 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

J aime bien le C++ mais je prefere le C, tu sais je n ai fais que repondre a ca question, le plus simplement possible et le plus clairement possible,strlen(), etc... bref chez moi les fonction qu il parlais c est du C et non du C++. D ailleur tu peut constater que je lui est parler aussi de l objet string.

Pour ce qui est de mediter sur ta reaction, c est deja mediter depuis longtemp, je suis sur une distribution ecrite en C, avec du Perl par ci par la et de l assembleur (pour le principale) donc le C++ m est inutile, bien que je l ai appris aussi pour pouvoir le lire correctement. Pour ce qui est de mes codes il sont juste je te rassure, et simplifier au maximum. je pense que la descritption des fonction est clair non?

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour poster des messages. Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !


Les bons plans du moment PC Astuces

Tous les Bons Plans
59,99 €Nintendo Ring Fit Adventure pour Switch à 59,99 €
Valable jusqu'au 11 Août

Amazon fait une promotion sur le Nintendo Ring Fit Adventure pour Switch à 59,99 € livré gratuitement au lieu de 79 €. Faites du sport tout en vous amusant avec Ring Fit Adventure ! Munis des accessoires présents dans la boite du jeu partez à l’aventure et réalisez des mouvements de sports pour avancer dans les niveaux. Poussez sur le Ring-Con et vous enverrez un choc sur vos ennemis ! A la fin de chaque exercice, mesurez même votre rythme cardiaque et découvrez le nombre de calories dépensées.


> Voir l'offre
19,71 €Prise connectée Wi-Fi TP-Link HS100 à 19,71 €
Valable jusqu'au 11 Août

Amazon fait une promotion sur la prise intelligente Wi-Fi TP-Link HS100 qui passe à 19,71 € alors qu'on la trouve habituellement autour de 35 €. Cette prise peut être contrôlée à distance en utilisant l'app gratuite KASA sur votre smartphone (iOS ou Android). Vous pouvez créer des planifications horaires pour allumer ou éteindre automatiquement et quand vous le souhaitez, l'appareil qui y est branché. Pour en savoir plus, n'hésitez pas à lire notre dossier pratique Contrôler une prise électrique à distance.


> Voir l'offre
16,24 €Clé USB 3.0 Kingston DataTraveler 100 G3 128 Go à 16,24 €
Valable jusqu'au 15 Août

Amazon propose la clé USB 3.0 Kingston DataTraveler 100 G3 128 Go à 16,24 €. Sa fermeture coulissante vous permettra de protéger le connecteur USB 3.0 (compatible USB 2.0). La livraison est gratuite.


> Voir l'offre

Sujets relatifs
[info] Swift: Pourquoi Apple a créé un nouveau langage de programmation
programmation simple
Editer à la chaîne les raccourcis dans un dossier
déterminer si un une chaine est crypté
Chaine caractere en VB6
Conversion Chaîne VB6
Débuts en programmation...
Windev 15: Supprimé une ligne appartir d'un chaine
Programmation mobile en C#
programmation vb.net
Plus de sujets relatifs à programmation des chaine de type car(C++)
 > Tous les forums > Forum Autres langages