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

  FORUM HardWare.fr
  Programmation
  C

  [C] remplacer par des étoiles ou par rien...

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

[C] remplacer par des étoiles ou par rien...

n°1264965
magiclazy
citation personnelle associé
Posté le 12-12-2005 à 22:14:02  profilanswer
 

je voudrais faire remplacer ce que la personne tape par rien ou des etoiles un peu comme sous linux les mots de passe....
 
j'étais partis sur les fonctions get() etc.. mais je n'arrive à rien  
 
voilà merci d'avance


---------------
signature du message
mood
Publicité
Posté le 12-12-2005 à 22:14:02  profilanswer
 

n°1264972
magiclazy
citation personnelle associé
Posté le 12-12-2005 à 22:15:59  profilanswer
 

ps: vous affolez pas parceque là je vais dormir ... donc bonne nuit et puis merci d'avance ;) lol
 
EDIT:pour les mefiants je vais vraiment me coucher se n'est pas de l'ironie ....  
        (& tout sa pour un post...)


Message édité par magiclazy le 12-12-2005 à 22:17:07

---------------
signature du message
n°1264994
Emmanuel D​elahaye
C is a sharp tool
Posté le 12-12-2005 à 22:21:40  profilanswer
 

magiclazy a écrit :

je voudrais faire remplacer ce que la personne tape par rien ou des etoiles un peu comme sous linux les mots de passe....
 
j'étais partis sur les fonctions get() etc.. mais je n'arrive à rien  


getpass(). C'est pas standard, mais on le trouve souvent. Sinon, faut le faire à la main. Comment ? Ca dépend de la plateforme...


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1265075
Elmoricq
Modérateur
Posté le 12-12-2005 à 22:59:24  profilanswer
 

Sous Unix j'utilise la méthode de la désactivation de l'écho du terminal (man termios, fonction tcsetattr(), propriété ECHO).
C'est POSIX.1, et plutôt efficace (penser à rétablir le terminal quand on a fini [:petrus75] )
 
Pour les OS non-POSIX, je ne sais pas.


Message édité par Elmoricq le 12-12-2005 à 22:59:53
n°1265093
chrisbk
-
Posté le 12-12-2005 à 23:20:34  profilanswer
 

Emmanuel Delahaye a écrit :

getpass(). C'est pas standard, mais on le trouve souvent. Sinon, faut le faire à la main. Comment ? Ca dépend de la plateforme...


 
y'a pas des feintes aux ncurses ?

n°1265433
magiclazy
citation personnelle associé
Posté le 13-12-2005 à 13:19:48  profilanswer
 

dsl elmoriq je suis debutant esce que tu peux me donner un exemple ?merci


---------------
signature du message
n°1265438
magiclazy
citation personnelle associé
Posté le 13-12-2005 à 13:27:14  profilanswer
 

jai regardé le man getpass() et c pas mal seulement dans certain man ils disent d'inclure  
 
unistd.h et d'autres
pwd.h
 
mais je ne l'ai trouve pas pour les telecharger merci d'avance


Message édité par magiclazy le 13-12-2005 à 13:38:00

---------------
signature du message
n°1265531
Elmoricq
Modérateur
Posté le 13-12-2005 à 14:33:24  profilanswer
 

Tu dois les avoir de base, ils font partie de la libc.
J'aurais même tendance à dire que si tu as le man, tu as la fonction.
 
Si tu disposes de getpass() sur ta machine (ce n'est pas mon cas), utilise cette fonction plutôt.  
Parce que la configuration des terminaux n'est pas triviale :
 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <termios.h>
 
int main(void)
{
    struct termios normal_term, pass_term;
    char password[250], *eol;
 
    /* Sauvegarde du terminal courant */
    if ( tcgetattr(STDOUT_FILENO, &normal_term) == -1 )
    {
        perror("Sauvegarde du terminal" );
        return EXIT_FAILURE;
    }
 
    /* Configuration du terminal sans ECHO */
    if ( ! memcpy(&pass_term, &normal_term, sizeof(struct termios)) )
    {
        fprintf(stderr, "Echec memcpy()" );
        return EXIT_FAILURE;
    }
    pass_term.c_lflag &= ~ECHO;  
    if ( tcsetattr(STDOUT_FILENO, TCSADRAIN, &pass_term) == -1 )
    {
        perror("Modification du terminal" );
        return EXIT_FAILURE;
    }
 
    /* Demande du mot de passe */
    printf("Mot de passe : " );
    fflush(stdout);  
 
    fgets(password, sizeof password, stdin);
    eol = strrchr(password, '\n');
    if ( eol )
        eol[0] = '\0';
   
    /* rétablissement du terminal */
    if ( tcsetattr(STDOUT_FILENO, TCSADRAIN, &normal_term) == -1 )
    {
        perror("Rétablissement du terminal" );
        return EXIT_FAILURE;
    }
 
    printf("\nLu : %s\n", password);
    return EXIT_SUCCESS;
}


(c'est du vite-fait)


Message édité par Elmoricq le 13-12-2005 à 14:33:52
n°1265673
magiclazy
citation personnelle associé
Posté le 13-12-2005 à 16:44:41  profilanswer
 

ha ok....
ben je crois je vais allé voir getpass() parcontre j'ai regardé quand j'utilise unistd.h j'ai une erreur de compilation et il mouvre unisdt.h
et me met en rouge cette ligne qui est d'ailleur la seul ...
 
#include "io.h"


---------------
signature du message
n°1265674
magiclazy
citation personnelle associé
Posté le 13-12-2005 à 16:46:17  profilanswer
 

par contre je voudrais dire je suis sous windows et dev c++
mais tu dis "je ne dispose pas de getpass()" c'est a dire ? on ne peut pas utiliser cette fonction sur certain machine ? meme si lon telecharge la le include qu'il faut ?


---------------
signature du message
mood
Publicité
Posté le 13-12-2005 à 16:46:17  profilanswer
 

n°1265676
Elmoricq
Modérateur
Posté le 13-12-2005 à 16:46:48  profilanswer
 

Je ne peux pas t'aider, c'est dépendant de ton OS. Mais tu devrais avoir un fichier io.h qui traine dans /usr/include ou quelque part dans ton filesystem.
Si tu le trouves, vérifie que l'endroit où il se trouve est indiqué dans la variable d'environnement LD_LIBRARY_PATH

 
EDIT :

magiclazy a écrit :

par contre je voudrais dire je suis sous windows et dev c++


 
GRUMPF !
Tu aurais dû commencer par là.
Même la solution que je t'ai postée ne devrait pas fonctionner, vu qu'elle se base sur POSIX.1
Et c'est normal que tu n'aies pas de unistd.h (unistd = UNIx STanDard)


Message édité par Elmoricq le 13-12-2005 à 16:49:46
n°1265683
magiclazy
citation personnelle associé
Posté le 13-12-2005 à 16:52:46  profilanswer
 

ups dsl de ce coté la je connais pas encore tres biens les dependances à l'OS..


---------------
signature du message
n°1265687
Elmoricq
Modérateur
Posté le 13-12-2005 à 16:54:58  profilanswer
 

Ouais enfin Emmanuel a bien dit que ça dépendait des OS, et j'ai bien précisé que le coup du terminal c'était sous unixoïdes.
Alors quand tu m'as demandé un exemple, j'ai cru que tu étais sur un Linux ou autre...

n°1265690
magiclazy
citation personnelle associé
Posté le 13-12-2005 à 16:57:31  profilanswer
 

:sweat:  dsl  
 
sinon connais tu un moyen d'utiliser getpass() sous win XP et avec quel include parceque les man sur google sous contradictoires alors je sais pas vers ou morienter pour les recherche et les erreur que j'ai parceque sa se trouve ce n'est pas le bon include alors .. :cry:  
 
en tt cas merci


---------------
signature du message
n°1265698
Elmoricq
Modérateur
Posté le 13-12-2005 à 17:04:42  profilanswer
 

getpass() n'étant pas standard, s'il existe sur ton système, il faut le rechercher pour savoir dans quel en-tête il est défini.
Par définition, une fonction non-standard est propre à l'implémentation sur laquelle elle est présente. D'où les contradictions que tu trouves dans les manpages.
 
Maintenant rien ne dit que la libc que tu utilises inclu getpass().


Message édité par Elmoricq le 13-12-2005 à 17:05:17
n°1265733
Emmanuel D​elahaye
C is a sharp tool
Posté le 13-12-2005 à 17:46:03  profilanswer
 

magiclazy a écrit :

par contre je voudrais dire je suis sous windows et dev c++
mais tu dis "je ne dispose pas de getpass()" c'est a dire ? on ne peut pas utiliser cette fonction sur certain machine ? meme si lon telecharge la le include qu'il faut ?


 
(Dev-C++)
Installer le devpack 'conio'


#include <conio2.h>
 
#include <string.h>
#include <stdio.h>
 
int main (void)
{
   char pwd[128];
 
   getpass ("Password", pwd);
   puts ("" );
 
   if (strcmp (pwd, "supercalifragilisticexpialidocious" ) == 0)
   {
      puts ("let's get in..." );
   }
   else
   {
      puts ("input error" );
   }
 
   return 0;
}


Attention, cependant, cette fonction est aussi dangereuse que gets()... (pas de contrôle de limite. Pour un mot de passe, c'est grave...)
 


Message édité par Emmanuel Delahaye le 13-12-2005 à 17:47:52

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1266121
magiclazy
citation personnelle associé
Posté le 14-12-2005 à 10:08:15  profilanswer
 

ok merci je fais sa  
 
pour linstant le site devpack ne marche pas donc je vais attendre un peu...
 
EDIT: Comment recherche dans quel en tête il pourrait etre ?

Message cité 1 fois
Message édité par magiclazy le 14-12-2005 à 10:09:54

---------------
signature du message
n°1266127
magiclazy
citation personnelle associé
Posté le 14-12-2005 à 10:19:46  profilanswer
 

il n'y aurait pas moyen d'avoir un comoilateur ayant un maximun de bibliothqe pour eviter ces problemes ?


---------------
signature du message
n°1266141
Emmanuel D​elahaye
C is a sharp tool
Posté le 14-12-2005 à 10:46:01  profilanswer
 

magiclazy a écrit :

pour linstant le site devpack ne marche pas donc je vais attendre un peu...


Je viens de faire mes mise à jours, aucun problème.

Citation :

EDIT: Comment recherche dans quel en tête il pourrait etre ?


grep ?  
 
Tu es bien conscient que ce qu'il y a dans un entête n'est que l'interface d'une bibliothèque. Le code d'implémentation se trouve dans le fichier de biblibliothèque lui-même (.a, .lib) qui doit être lié au projet...
 
http://mapage.noos.fr/emdel/notes.htm#bibliotheque


Message édité par Emmanuel Delahaye le 14-12-2005 à 10:46:35

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1266142
Emmanuel D​elahaye
C is a sharp tool
Posté le 14-12-2005 à 10:48:12  profilanswer
 

magiclazy a écrit :

il n'y aurait pas moyen d'avoir un comoilateur ayant un maximun de bibliothqe pour eviter ces problemes ?


Dev-C++ (et Code::Blocks, mêmes devpaks) sont certainement les produits libres les plus ouverts qu'il soient dans le monde Windows.


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1266178
magiclazy
citation personnelle associé
Posté le 14-12-2005 à 11:19:26  profilanswer
 

oki merci
 
 
[EDIT]: il n'y aurait pas un autre lien pour telecharger les packs parceque le site est inacessible  ::
 
 
"Error!
Can't connect to MySQL Server. Errorcode: P-Bø�stup pro u�ivatele 'devpaks4.devpaks'@'193.86.238.13' (s heslem ANO)".
 
 
Merci d'avance


Message édité par magiclazy le 14-12-2005 à 11:22:20

---------------
signature du message
n°1266192
magiclazy
citation personnelle associé
Posté le 14-12-2005 à 11:27:46  profilanswer
 

whouaaaaa  Code::Blocks est super je l'avais pas essayé trop cool  
bon ben maintenant je suis sous code::block
 
[EDIT] google ve pas me dire si on peut le mettre en francais smirffff


Message édité par magiclazy le 14-12-2005 à 11:32:17

---------------
signature du message
n°1266200
Elmoricq
Modérateur
Posté le 14-12-2005 à 11:36:26  profilanswer
 

Vu la qualité de certaines traductions, autant le laisser en anglais.
 
Et puis autant t'y habituer, à l'anglais, parce que tu vas en manger.

n°1266205
magiclazy
citation personnelle associé
Posté le 14-12-2005 à 11:43:16  profilanswer
 

.... effectivement ....
 
ps: pour code::blocks j'ai telecharger directement avec le updater/installer conio  
mais dans build message j'ai :
 
no new line at end of file
 
et dans  buil log :
 
Switching to target: default
Linking console executable: C:\Documents and Settings\be lazy  it's cool !\Bureau\langages\C\usvCB\projet.exe
.objs\main.o:main.c:(.text+0x45): undefined reference to `getpass'
collect2: ld returned 1 exit status
Process terminated with status 1 (0 minutes, 1 seconds)


---------------
signature du message
n°1266211
Elmoricq
Modérateur
Posté le 14-12-2005 à 11:46:26  profilanswer
 

Pour le warning, "no new line at end of file", ce n'est normalement pas bloquant pour la suite.
Mais tu as cet avertissement parce que dans la norme, la dernière ligne de code d'un fichier source ou en-tête doit se terminer par une fin de ligne.  
Les compilateurs sont en général complaisants et se contentent de te signaler le problème, sans pour autant bloquer dessus. En tout cas les deux ou trois compilateurs que je connais.

n°1266217
magiclazy
citation personnelle associé
Posté le 14-12-2005 à 11:49:44  profilanswer
 

a oui effectivement j'ai juste a a sauter une ligne et cela n'apparait plus mais il ne s'execute pas alors sa doit venir du getpass() pourtant j'ai telecharger les librairies .. smirfff
 
 
[EDIT] il trouve bien conio2 mais il dit qui ni a pas de reference a getpass()

Message cité 1 fois
Message édité par magiclazy le 14-12-2005 à 12:00:04

---------------
signature du message
n°1266233
Emmanuel D​elahaye
C is a sharp tool
Posté le 14-12-2005 à 12:05:57  profilanswer
 

magiclazy a écrit :

a oui effectivement j'ai juste a a sauter une ligne et cela n'apparait plus mais il ne s'execute pas alors sa doit venir du getpass() pourtant j'ai telecharger les librairies .. smirfff
 
 
[EDIT] il trouve bien conio2 mais il dit qui ni a pas de reference a getpass()


Comme signalé précédemment, cette fonction est dangereuse et a peut être été retirée de conio. Soit il existe une nouvelle version (autre nom, fouiller un peu conio.h), soit tu la fais toi même à coup de getch() / putch(). C'est pas trivial, mais c'est instructif...
 
Je conseille ce prototype:  

int my_getpass (char *s, size_t size);


Message édité par Emmanuel Delahaye le 14-12-2005 à 12:09:44

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1266236
magiclazy
citation personnelle associé
Posté le 14-12-2005 à 12:07:53  profilanswer
 

pour les getch et tout ji avais penser...  je crois que c ce que je vais faire par contre  
pour le proto j'y connais rien tu n'aurais un tuto ??
 
merci


Message édité par magiclazy le 14-12-2005 à 12:29:34

---------------
signature du message
n°1266237
Elmoricq
Modérateur
Posté le 14-12-2005 à 12:10:56  profilanswer
 
n°1266238
magiclazy
citation personnelle associé
Posté le 14-12-2005 à 12:11:24  profilanswer
 

[EDIT]avec unistd c pareil ....
 
 
j'ai foullé dans conio2 c'est bizarre il y fait notion de getpass() ....
 
 
 
 
**
 * Reads password. This function behaves like cgets.
 *
 * @see cgets
 * @param prompt prompt which will be displayed to user
 * @param str string for the password. <TT>str[0]</TT> have to contain
 * length of the <TT>str</TT> - 3
 * @returns <TT>&str[2]</TT>, the password will be stored in <TT>str</TT>
 * beginning at <TT>str[2]</TT>, in <TT>str[1]</TT> will be length of the
 * string without <TT>\\0</TT>, at <TT>str[2 + str[1]]</TT> will be \\0.
 */
char * getpass (const char * prompt, char * str);
 
/**
 * Makes foreground colors light.
 * If the current foreground color is less than <TT>DARKGRAY</TT> adds
 * 8 to the its value making dark colors light.
 * @see COLORS
 * @see lowvideo
 */


Message édité par magiclazy le 14-12-2005 à 12:12:03

---------------
signature du message
n°1266243
magiclazy
citation personnelle associé
Posté le 14-12-2005 à 12:13:59  profilanswer
 

unistd ......
 
 
/*
 * This file is part of the Mingw32 package.
 *
 * unistd.h maps (roughly) to io.h
 */
 
#ifndef _UNISTD_H
#define _UNISTD_H
 
#include <io.h>
#include <process.h>
 
#define __UNISTD_GETOPT__
#include <getopt.h>
#undef __UNISTD_GETOPT__
 
#ifdef __cplusplus
extern "C" {
#endif
 
/* This is defined as a real library function to allow autoconf
   to verify its existence. */
int ftruncate(int, off_t);
__CRT_INLINE int ftruncate(int __fd, off_t __length)
{
  return _chsize (__fd, __length);
}
 
#ifdef __cplusplus
}
#endif
 
#endif /* _UNISTD_H */


---------------
signature du message
n°1266289
magiclazy
citation personnelle associé
Posté le 14-12-2005 à 13:15:22  profilanswer
 

rrrr je ne trouve pas de man sur putch()...


---------------
signature du message
n°1266300
Emmanuel D​elahaye
C is a sharp tool
Posté le 14-12-2005 à 13:32:02  profilanswer
 

magiclazy a écrit :

Switching to target: default
Linking console executable: C:\Documents and Settings\be lazy  it's cool !\Bureau\langages\C\usvCB\projet.exe
.objs\main.o:main.c:(.text+0x45): undefined reference to `getpass'
collect2: ld returned 1 exit status
Process terminated with status 1 (0 minutes, 1 seconds)


Normal, est-ce que tu as ajouté conio à ton projet (-lconio) comme je te l'avais déjà indiqué ?
 
http://forum.hardware.fr/hardwaref [...] m#t1266141


Message édité par Emmanuel Delahaye le 14-12-2005 à 13:34:22

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1266302
magiclazy
citation personnelle associé
Posté le 14-12-2005 à 13:33:33  profilanswer
 

oui oui ... justement c sa qui est bizarre ...


---------------
signature du message
n°1266304
Emmanuel D​elahaye
C is a sharp tool
Posté le 14-12-2005 à 13:35:51  profilanswer
 

magiclazy a écrit :

rrrr je ne trouve pas de man sur putch()...


Pas compliqué. Tu mets un caractère dans le paramètre et il sort à l'écran à la position courante du curseur.


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1266306
magiclazy
citation personnelle associé
Posté le 14-12-2005 à 13:38:59  profilanswer
 

HAHA a ni rien comprendre j'ai redemarer le logiciel maintenant sa marche en presque le truc s'execute mais je ne comprends pas quel est le mot de passe a taper ? parceque j'ai tout essayer sa met tt le temps input error


---------------
signature du message
n°1266307
Emmanuel D​elahaye
C is a sharp tool
Posté le 14-12-2005 à 13:41:40  profilanswer
 

magiclazy a écrit :

HAHA a ni rien comprendre j'ai redemarer le logiciel maintenant sa marche en presque le truc s'execute mais je ne comprends pas quel est le mot de passe a taper ? parceque j'ai tout essayer sa met tt le temps input error


Montre ton code.
 
Si c'est l'exemple que j'avais donné, taper

supercalifragilisticexpialidocious


c'est un gag, évidemment. Jamais vu Mary Poppins dans ta jeunesse ?
 
http://en.wikipedia.org/wiki/Super [...] alidocious


Message édité par Emmanuel Delahaye le 14-12-2005 à 13:47:23

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1266315
magiclazy
citation personnelle associé
Posté le 14-12-2005 à 13:44:23  profilanswer
 

si... mais jai changé pour eviter les fautes j'ai mis ;) aa pour tester .. mais sa ne marche pas ..


---------------
signature du message
n°1266317
magiclazy
citation personnelle associé
Posté le 14-12-2005 à 13:45:38  profilanswer
 

Code :
  1. #include <conio2.h>
  2. #include <string.h>
  3. #include <stdio.h>
  4. int main (void)
  5. {
  6.    char pwd[128];
  7.    getpass ("Password", pwd);
  8.    puts ("" );
  9.    if (strcmp (pwd, "aa" ) == 0)
  10.    {
  11.       puts ("let's get in..." );
  12.    }
  13.    else
  14.    {
  15.       puts ("input error" );
  16.    }
  17.    return 0;
  18. }


---------------
signature du message
n°1266331
Emmanuel D​elahaye
C is a sharp tool
Posté le 14-12-2005 à 13:57:05  profilanswer
 


 
Ok, j'avais pas testé mon code, désolé. En fait les données utiles commencent à tab+2. C'est sans doute dans la doc... Il doit y avoir des infos annexes (longueur, peut être...) dans les premiers bytes...  
 
http://conio.sourceforge.net/docs/ [...] 8h.html#a0
 
Ce genre de gag étatit courant dans certaines bibliothèques Borland (à l'origine de conio). Quand on s'écarte du standard, on arrive vite sur des terrains glissants...


   #include <conio2.h>
 
   #include <string.h>
   #include <stdio.h>
 
   int main (void)
   {
      char pwd[128];
 
      pwd[0] = sizeof pwd - 3;
      getpass ("Password: ", pwd);
 
      puts ("" );
 
#if 0
      printf ("'%s'\n", pwd + 2);
#endif
 
      if (strcmp (pwd + 2, "aa" ) == 0)
      {
         puts ("let's get in..." );
      }
      else
      {
         puts ("input error" );
      }
 
      return 0;
   }


Message édité par Emmanuel Delahaye le 14-12-2005 à 14:10:23

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

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

  [C] remplacer par des étoiles ou par rien...

 

Sujets relatifs
Remplacer un Grapher Ilog Views avec QT 4.0Rechercher/remplacer
Remplacer N° de ligne cellules par variablesRemplacer un caractère par un autre?
Help please : j'arrive à rienEncore Internet Explorer qui ne respecte rien....
requete d'ajout qui ne fait rienAffichage d'une image qui ne ressemble à rien
remplacer une chaine de caractere dans un fichier en .batJ'comprends plus rien : SPIP
Plus de sujets relatifs à : [C] remplacer par des étoiles ou par rien...


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