RicardasSim

testing pointer

Sep 27th, 2023 (edited)
1,761
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.51 KB | None | 0 0
  1. /*
  2. test_file.txt
  3.  
  4. 1234567890
  5. */
  6.  
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <stdbool.h>
  10.  
  11. bool LoadFileToZTMemBufferTest( char *file_name,
  12.                                 char **p_buffer,
  13.                                 size_t *p_size )
  14. {
  15.  
  16.     FILE *fp = NULL;
  17.     *p_buffer = NULL;
  18.     *p_size = 0;
  19.     size_t file_size;
  20.     size_t buffer_size;
  21.     size_t result;
  22.  
  23.     fp = fopen( file_name, "rb" );
  24.  
  25.     if(!fp)
  26.     {
  27.         printf("Error: cannot open file \"%s\"\n", file_name );
  28.         return false;
  29.     }
  30.  
  31.     fseek( fp, 0, SEEK_END );
  32.  
  33.     file_size = ftell( fp );
  34.  
  35.     fseek( fp, 0, SEEK_SET );
  36.  
  37.     buffer_size = file_size + 1;
  38.  
  39.     *p_buffer = calloc( buffer_size, sizeof(char) );
  40.  
  41.     if( !*p_buffer )
  42.     {
  43.         printf("Error: memory allocation error\n");
  44.         fclose( fp );
  45.         return false;
  46.     }
  47.  
  48.     result = fread( *p_buffer, 1, file_size, fp );
  49.  
  50.     if( result != file_size )
  51.     {
  52.         free(*p_buffer);
  53.         *p_buffer = NULL;
  54.         fclose(fp);
  55.         printf("Error: error reading file\n");
  56.         return false;
  57.     }
  58.  
  59.     fclose( fp );
  60.  
  61.     *p_size = buffer_size;
  62.  
  63.  
  64.     //v1
  65.  
  66.     char *p_tmp = *p_buffer;
  67.  
  68.     printf("(1a) %p\n", (void*) p_tmp);
  69.  
  70.     p_tmp += file_size;
  71.  
  72.     printf("(1b) %p\n", (void*) p_tmp);
  73.  
  74.     *p_tmp = '\0';
  75.  
  76.     //v2
  77.  
  78.     printf("(2a) %p\n", (void*) (*p_buffer + file_size) );
  79.  
  80.     *( *p_buffer + file_size ) = '\0';
  81.  
  82.     //v3
  83.  
  84.     (*p_buffer)[file_size] = '\0';
  85.  
  86.     printf("(3a) %p\n", (void*) &(*p_buffer)[file_size] );
  87.  
  88.  
  89.     // test
  90.  
  91.     printf( "(test 1) %p\n", (void*) p_buffer);
  92.     printf( "(test 2) %p\n", (void*) p_buffer[0]);
  93.     printf( "(test 3) %p\n", (void*) *p_buffer);
  94.  
  95.  
  96.     return true;
  97. }
  98.  
  99. int main()
  100. {
  101.  
  102.     char *p_buff = NULL;
  103.     size_t size = 0;
  104.  
  105.     printf( "Buffer address before: %p\n", (void*) p_buff);
  106.     printf( "Address of pointer: %p\n", (void*) &p_buff);
  107.  
  108.     if(!LoadFileToZTMemBufferTest( "test_file.txt", &p_buff, &size ))
  109.     {
  110.         printf("Error: LoadFileToZTMemBufferTest\n");
  111.         return 1;
  112.     }
  113.  
  114.     printf("Buffer size: %zu\n", size);
  115.  
  116.     printf( "Buffer address after: %p\n", (void*) p_buff);
  117.  
  118.     free(p_buff);
  119.  
  120.     return 0;
  121. }
  122.  
  123. /*
  124. output:
  125.  
  126. Buffer address before: (nil)
  127. Address of pointer: 0x7fffc4573678
  128. (1a) 0x561131e698a0
  129. (1b) 0x561131e698aa
  130. (2a) 0x561131e698aa
  131. (3a) 0x561131e698aa
  132. (test 1) 0x7fffc4573678
  133. (test 2) 0x561131e698a0
  134. (test 3) 0x561131e698a0
  135. Buffer size: 11
  136. Buffer address after: 0x561131e698a0
  137.  
  138. */
Advertisement