|
|
|
|
Dans mon long apprentissage du langage C, je suis rendu manipulations de chaînes de caractères avec des pointeurs (chapitre 10/21). Voilà un extrait de code donné en exemple pour contrôler une ligne blanche avec gets() :
while( *(pointeur = gets(input)) != NULL)
{ (instructions) }
/*reste du programme*/
while( *(pointeur = gets(input)) == NULL)
{
printf("Vous n'avez pas entré de chaîne. Alors cette fois écris quelque chose : ");
gets(phrase);
}
/*reste du programme*/
Par exemple... Mais c'est pas les instructions de la boucle while qui font planter, j'ai vérifié... BOOM ! Laissez se propager l'onde de choc... |
J'ai testé le même code sur mon win98 et il fonctionne parfaitement... En effet guki c'est la valeur de l'adresse pointée qui doit être nulle, ce qui est le cas lorsque tu entres une ligne blanche : le pointeur pointe sur un caractère nul.
char input[256], *pointeur = input;Pour la version de mon win98 et char input[256], *pointeur; pointeur = input;Pour la version winXP, j'ai raccourci le tout sur mon win98. input étant un pointeur vers input[0], seule l'adresse mémoire intéresse le pointeur donc pas de "*" devant pointeur. Pour Kilian et Guki, une seule chose à dire : tschhh... hoooo... tschh.... hooooo.... :-) la patience n'est pas la 1ere de mes qualités dans certaines situations ! BOOM ! Laissez se propager l'onde de choc... |
Bon si je reprend les bouts d'information:
|
Hello !
|
Salut
N'utilisez jamais gets(). Comme il est impossible de savoir à l'avance combien de caractères seront lus par gets(), et comme celui-ci écrira tous les caractères lus, même s'ils débordent du buffer, cette fonction est extrèmement dangereuse à utiliser. On a déjà utilisé ce dysfonc- tionnement pour créer des trous de sécurité. UTILISEZ TOUJOURS fgets() A LA PLACE DE gets(). Pour le probleme
#include <stdio.h>
int main(int N, char * A[])
{
char input[500];
memset(input,0,sizeof(input));
do
{
printf("Entrez une chaine svp.\n");
fgets(input,sizeof(input),stdin);
/* verifie si un valeur est dans input, le /r pour win32 seulement */
} while ((input[0] == 0) || (input[0] == '/n') || (input[0] == '/r')) ;
printf("Vous avez entre %s\n", input);
return 0;
}
|
Hello !
|
Oula... fgets(), FILE, fopen, fclose... tout ça j'ai pas encore vu ! Je suis qu'un simple débutant : je viens de terminer le chapitre sur les structures et de commencer celui sur la portée des variables. Mais sinon j'ai copié collé vos codes et ils fonctionnent.
|