Adresse d'un tableau de char
Bonjour
Ce bout de code me pose problème :
Code:
1 2 3
| char txt[50];
printf("Saisir la clef secrete : "); /* Saisie de la clef secrete */
scanf("%s",&txt); |
Que l'on tape scanf("%s", txt); ou scanf("%s", &txt); il n'y a pas de différence, aucun warning ni erreur à la compile (avec Visual C6 ou Borland C++), et la chaîne est rangée dans txt. Pourquoi ?
Je me souviens d'un compilo, "pwb" sous OS2 je crois, qui me signalait au moins un warning en disant que prendre l'adresse d'un tableau est inopérant, pourquoi ne le fait-il plus ?
Re: Adresse d'un tableau de char
Citation:
Envoyé par Trap D
Ce bout de code me pose problème :
Code:
1 2 3
| char txt[50];
printf("Saisir la clef secrete : "); /* Saisie de la clef secrete */
scanf("%s",&txt); |
Que l'on tape scanf("%s", txt); ou scanf("%s", &txt); il n'y a pas de différence, aucun warning ni erreur à la compile (avec Visual C6 ou Borland C++), et la chaîne est rangée dans txt. Pourquoi ?
Je me souviens d'un compilo, "pwb" sous OS2 je crois, qui me signalait au moins un warning en disant que prendre l'adresse d'un tableau est inopérant, pourquoi ne le fait-il plus ?
scanf() est une fonction 'variadic' (à nombre et type indéterminé de paramètres). Certains compilateurs comme gcc vérifient le type par rapport à la chaine de paramètrage, d'autres non.
C'est un des arguments contre les fonctions variadics (absence de vérification des paramètres).
Dans tous les cas, il est préférable de saisir une ligne avec fgets(), ce qui scelle le problèmes de scanf(). En effet, 'scanf ("%s", buf)' est aussi dangereux que 'gets(buf)'.