Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2137 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Pourquoi gets pose t'il un problème?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Pourquoi gets pose t'il un problème?

n°1364775
Haldor
Posté le 12-05-2006 à 09:24:06  profilanswer
 

Je suis débutant en programmation et je voudrais savoir pourquoi est-ce-que qu'en j'utilise gets sur Linux il me dit que cela peut-être dangereux?

mood
Publicité
Posté le 12-05-2006 à 09:24:06  profilanswer
 

n°1364776
kadreg
profil: Utilisateur
Posté le 12-05-2006 à 09:26:06  profilanswer
 

http://www.freebsd.org/doc/fr_FR.I [...] x1212.html


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°1364796
Haldor
Posté le 12-05-2006 à 09:43:09  profilanswer
 

Ok donc si j'ai bien compris il y a dans le PC deux Registres qui permettent de savoir:1-La fonction en cours  
          2-Les arguments et autres variables de cette fction
          3-La valeur de retour de cette fction
Et gets permets de dépasser la valeur d'une de ces piles c'est ca?Et si je poursuit le raisonnement elle permets même de passer directement à l'instruction suivante->Déduction:
Il n'y a qu'une seule Pile qui regroupe les fonctions et leurs arguments et si on depasse ,avec une fction comme gets par exemple, la quantité d'espace mémoire réservé à la variable aléatoire d'une fonction le CPU continue à lui donner de la place et saute donc une fonction dans la pile:C'est ça ou pas du tout?!!!

n°1364812
Taz
bisounours-codeur
Posté le 12-05-2006 à 10:00:00  profilanswer
 

cette explication est trop compliquée. à gets, tu lui donnes un seul paramètre : un pointeur vers une zone mémoire ou écrire. seulement tu ne peux jamais prévoir combien gets va écrire de char, ni l'empêcher de dépasser. et quand gets dépasse, et bien c'est un comportement indéfini. ça va du plantage à la faille de sécurité.

n°1364820
Haldor
Posté le 12-05-2006 à 10:09:23  profilanswer
 

Ok j'ai compris! Merci!Merci!
 Bon alors comment est-ce-que l'on fait pour avoir une fction qui écrive un nombre défini de char et qui accepte de continuer la saisie même si il y a un espace?  
Parceque cin si il y a espace hop il stoppe tout!

n°1364878
franceso
Posté le 12-05-2006 à 10:52:35  profilanswer
 

l'équivalent sûr de gets est fgets (à qui tu passes en paramètre le nombre maximal de caractères que tu veux lire). Mais tout ça c'est du C
 
En C++, tu peux utiliser des strings et la fonction getline()

n°1364894
Haldor
Posté le 12-05-2006 à 10:56:14  profilanswer
 

Ok j'essaye  
Merci!

n°1364943
Haldor
Posté le 12-05-2006 à 11:26:32  profilanswer
 

Bah je suis venue, j'ai vue et je suis repartue, comment on fait pour utiliser les string?
Moi j'ai fait: string *phrase;
Et il ne voit pas ce que c'est que string, donc si quelqu'un pouvait m'expliquer,...
                 

n°1364950
franceso
Posté le 12-05-2006 à 11:31:58  profilanswer
 

Code :
  1. #include <string>
  2. using std::string;


 
tu crois pas qu'en cherchant un peu t'aurais pu trouver ça tout seul ?

n°1364961
Haldor
Posté le 12-05-2006 à 11:45:15  profilanswer
 

Si mais je postais plus haut et j'avais pas le temps mais bon t'as quand même raison je devrais chercher plus,...
Mais c'est vrai que je ne sais pas du tout à quoi sert les "using::std" que je vois partout et puis pourquoi est ce qu'il n'y a pas de .h apres "string"?

mood
Publicité
Posté le 12-05-2006 à 11:45:15  profilanswer
 

n°1364985
franceso
Posté le 12-05-2006 à 12:02:45  profilanswer
 

<string.h> est un en-tête C ; <string> est un en-tête C++.
 
Dans les en-têtes C++, (genre <iostream>, <string>, ...) tout est déclaré dans l'espace de nom std. Du coup en théorie tu devrais faire ça:

Code :
  1. #include <iostream>
  2. #include <string>
  3. std::string s( "tutu" );
  4. std::cout << s << std::endl;

comme ça alourdit pas mal la notation, on précise en général au compilateur qu'on va utiliser un certain nombre de membres de l'espace de noms std :

Code :
  1. #include <iostream>
  2. #include <string>
  3. using std::string;
  4. string s( "tutu" ); // pas besoin de préciser std:: grâce au "using"
  5. std::cout << s << std::endl; // std:: obligatoire car pas de "using"


n°1365107
skelter
Posté le 12-05-2006 à 14:21:49  profilanswer
 

et aussi
 

Code :
  1. getline(std::cin, s); // pas besoin de std::getline


 
pas besoin de preciser std::getline grace à l'ADL (meme chose pour std::ostream & std::operator<< (std::ostream&, ...) )
 
http://en.wikipedia.org/wiki/Koenig_lookup
 
il est important d'utiliser la directive using uniquement quand on peut se le permettre, en general chez soit dans un source (.cpp), jamais dans un en-tete et toujours en portee minimale si possible (dans le bloc ou il est reelement necessaire)
 
ecrire systematiquement (sans se poser la question) ce genre de truc
 

Code :
  1. #include <iostream>
  2. using namespace std;


 
ca revient ignorer le support des namespaces offert par le c++

n°1365690
Sve@r
Posté le 13-05-2006 à 19:14:36  profilanswer
 

franceso a écrit :

l'équivalent sûr de gets est fgets (à qui tu passes en paramètre le nombre maximal de caractères que tu veux lire). Mais tout ça c'est du C
 
En C++, tu peux utiliser des strings et la fonction getline()


euh... getline() existe aussi en C...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1365733
++fab
victime du syndrome IH
Posté le 13-05-2006 à 20:56:27  profilanswer
 

Sve@r a écrit :

euh... getline() existe aussi en C...


 
Pas en C standard. C'est une extension GNU.

n°1365737
++fab
victime du syndrome IH
Posté le 13-05-2006 à 21:03:14  profilanswer
 

skelter a écrit :

et aussi

Code :
  1. getline(std::cin, s); // pas besoin de std::getline


 
pas besoin de preciser std::getline grace à l'ADL.


Ce n'est pas obligatoire, mais est-ce souhaitable pour autant ?
(bien qu'il n'y ai pas de problème de surcharge avec l'extension GNU getline)
 
 

n°1365747
skelter
Posté le 13-05-2006 à 21:20:03  profilanswer
 

oui en effet vaut mieux eviter


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Pourquoi gets pose t'il un problème?

 

Sujets relatifs
probleme avec les tableauxproblème de requete
Problème de compilationProblème de DIV ?
Problème de traitement des paramètre avec getoptProbléme MATLAB
Problème JFrame et JComponentprobleme avec mon RTE (rich text editor)
probleme Debian Sarge 3.1 PHP5 SendMailproblème de Style: véritable casse-tete! Help
Plus de sujets relatifs à : Pourquoi gets pose t'il un problème?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR