remplacer par des étoiles ou par rien... [C] - C - Programmation
Marsh Posté le 12-12-2005 à 22:15:59
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...)
Marsh Posté le 12-12-2005 à 22:21:40
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.... |
getpass(). C'est pas standard, mais on le trouve souvent. Sinon, faut le faire à la main. Comment ? Ca dépend de la plateforme...
Marsh Posté le 12-12-2005 à 22:59:24
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 )
Pour les OS non-POSIX, je ne sais pas.
Marsh Posté le 12-12-2005 à 23:20:34
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 ?
Marsh Posté le 13-12-2005 à 13:19:48
dsl elmoriq je suis debutant esce que tu peux me donner un exemple ?merci
Marsh Posté le 13-12-2005 à 13:27:14
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
Marsh Posté le 13-12-2005 à 14:33:24
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> |
(c'est du vite-fait)
Marsh Posté le 13-12-2005 à 16:44:41
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"
Marsh Posté le 13-12-2005 à 16:46:17
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 ?
Marsh Posté le 13-12-2005 à 16:46:48
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)
Marsh Posté le 13-12-2005 à 16:52:46
ups dsl de ce coté la je connais pas encore tres biens les dependances à l'OS..
Marsh Posté le 13-12-2005 à 16:54:58
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...
Marsh Posté le 13-12-2005 à 16:57:31
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 ..
en tt cas merci
Marsh Posté le 13-12-2005 à 17:04:42
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().
Marsh Posté le 13-12-2005 à 17:46:03
magiclazy a écrit : par contre je voudrais dire je suis sous windows et dev c++ |
(Dev-C++)
Installer le devpack 'conio'
|
Attention, cependant, cette fonction est aussi dangereuse que gets()... (pas de contrôle de limite. Pour un mot de passe, c'est grave...)
Marsh Posté le 14-12-2005 à 10:08:15
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 ?
Marsh Posté le 14-12-2005 à 10:19:46
il n'y aurait pas moyen d'avoir un comoilateur ayant un maximun de bibliothqe pour eviter ces problemes ?
Marsh Posté le 14-12-2005 à 10:46:01
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
Marsh Posté le 14-12-2005 à 10:48:12
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.
Marsh Posté le 14-12-2005 à 11:19:26
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
Marsh Posté le 14-12-2005 à 11:27:46
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
Marsh Posté le 14-12-2005 à 11:36:26
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.
Marsh Posté le 14-12-2005 à 11:43:16
.... 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)
Marsh Posté le 14-12-2005 à 11:46:26
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.
Marsh Posté le 14-12-2005 à 11:49:44
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()
Marsh Posté le 14-12-2005 à 12:05:57
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 |
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); |
Marsh Posté le 14-12-2005 à 12:07:53
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
Marsh Posté le 14-12-2005 à 12:10:56
ReplyMarsh Posté le 14-12-2005 à 12:11:24
[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
*/
Marsh Posté le 14-12-2005 à 12:13:59
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 */
Marsh Posté le 14-12-2005 à 13:15:22
rrrr je ne trouve pas de man sur putch()...
Marsh Posté le 14-12-2005 à 13:32:02
magiclazy a écrit : Switching to target: default |
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
Marsh Posté le 14-12-2005 à 13:33:33
oui oui ... justement c sa qui est bizarre ...
Marsh Posté le 14-12-2005 à 13:35:51
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.
Marsh Posté le 14-12-2005 à 13:38:59
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
Marsh Posté le 14-12-2005 à 13:41:40
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
Marsh Posté le 14-12-2005 à 13:44:23
si... mais jai changé pour eviter les fautes j'ai mis aa pour tester .. mais sa ne marche pas ..
Marsh Posté le 14-12-2005 à 13:45:38
Code :
|
Marsh Posté le 14-12-2005 à 13:57:05
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...
|
Marsh Posté le 12-12-2005 à 22:14:02
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