home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 17 / CD_ASCQ_17_101194.iso / dos / prg / alb_c10 / chap_14 / ch14_01.c next >
Encoding:
C/C++ Source or Header  |  1994-09-28  |  1.7 KB  |  67 lines

  1. /*********************************************************************
  2. *  CH14_01.C                   Allocation de mΘmoire avec malloc() *
  3. *                       pour une chaεne de caractΦres *
  4. *********************************************************************/
  5.  
  6. #include<stdio.h>
  7. #include<string.h>                       /* pour strncpy()          */
  8. #include<alloc.h>                        /* pour malloc() et free() */
  9. #include<process.h>               /* pour exit()                */
  10.  
  11. void LitU( unsigned*);
  12. void LitChaine( char*, unsigned);
  13.  
  14. main( void)
  15. {
  16.     char *chaine;
  17.     unsigned dim;
  18.  
  19.     printf(" Entrez la dimension de la chaεne de caractΦres: ");
  20.     LitU( &dim);
  21.  
  22.     chaine= ( char*) malloc( dim* sizeof( char));
  23.     if( chaine== NULL)
  24.       {
  25.          printf("\n La mΘmoire disponible est insuffisante!\n");
  26.          exit( 1);
  27.       }
  28.     printf(" Entrez la chaεne:  ");
  29.     LitChaine( chaine, dim);
  30.     printf("\n chaεne:  %s", chaine); 
  31.  
  32.     free( chaine); 
  33. }
  34.  
  35. void LitChaine( char *chaine0, unsigned dim_chaine0)
  36. {
  37.     char *chaine1;
  38.     if( ( chaine1= ( char*) malloc( 2* 256) )== NULL)
  39.       {
  40.          printf("\n La mΘmoire disponible est insuffisante!\n");
  41.          exit( 1);
  42.       }
  43.     *(chaine0+ dim_chaine0- 1)='\0';
  44.  
  45.     while( scanf("%255[^\n]", chaine1)!= 1)
  46.         while( getchar() != '\n');
  47.        while( getchar() != '\n');              
  48.     strncpy( chaine0, chaine1, dim_chaine0- 1);
  49.     free( chaine1);  
  50. }
  51.  
  52. void LitU( unsigned* entier_u)
  53. {
  54.     double dble;
  55.     do
  56.     {
  57.        while( scanf("%lf", &dble)!= 1)
  58.         while( getchar() != '\n');
  59.        while( getchar() != '\n');
  60.     }
  61.     while( dble< 0.0 || dble> 65535.0);
  62.     *entier_u= ( unsigned) dble;
  63. }
  64. /*
  65.  Entrez la dimension de la chaεne de caractΦres: 16
  66.  Entrez la chaεne:  Petrus Albulus!!!
  67.  Affichage de la chaεne:  Petrus Albulus!                */