1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
| #include <stdio.h>
#include <stdlib.h>
#include <string.h>
void fclean(char *s_buffer, FILE *fp);
int main(void)
{
/* -tc- En C90, il est necessaire de définir les variables au
* debut d'un bloc.
*/
char prenom[10] = "";
char nom[10] = "";
char *ens = NULL;
int ret = EXIT_SUCCESS;
/* -tc- Attention, les tableaux de caractères prenom et nom sont
* limites a 9 caracteres, le 10eme etant reserve au caractere nul.
*/
printf("Donnez une chaine de caracteres (10 caracteres au maximum): ") ;
/* -tc- on force l'affichage de l'invite */
fflush(stdout);
/* -tc- Il n'est pas conseille d'utiliser scanf() pour la saisie de chaines
* de caracteres formatees. Essaie plutot avec fgets()
scanf("%s",prenom); */
fgets(prenom, sizeof prenom, stdin);
fclean(prenom, stdin);
printf("%s\n", prenom);
puts("Donnez une chaine de caracteres (10 caracteres au maximum): ");
fflush(stdout);
fgets(nom, sizeof nom, stdin);
fclean(nom, stdin);
/* -tc- Attention d'allouer l'espace pour le caractere nul de fin de
* chaine. Par ailleurs, sizeof(char) vaut 1 par definition.
*/
ens = malloc((strlen(prenom) + 1 + strlen(nom) + 1) * sizeof *ens);
/* -tc- TOUJOURS verifier que l'allocation a reussi */
if (ens != NULL)
{
ens[0] = 0;
strcat(ens, prenom);
strcat(ens, " ");
strcat(ens, nom);
printf("%s\n",ens);
/* -tc- on finit par libérer l'espace alloué dynamiquement */
free(ens), ens = NULL;
}
else
{
fprintf(stderr, "Erreur d'allocation!\n");
ret = EXIT_FAILURE;
}
return ret;
}
/**
* Elimine le caractere de fin de ligne saisi par fgets() et fait le menage
* sur le flux entrant en cas de saisie tronquee.
*/
void fclean(char *s_buffer, FILE *fp)
{
if (s_buffer != NULL && fp != NULL)
{
char *pc = strchr(s_buffer, '\n');
if (pc != NULL)
{
*pc = 0;
}
else
{
int c;
while ((c = fgetc(fp)) != '\n' && c != EOF)
{
}
}
}
} |
Partager