RicardasSim icon

testing pointer

RicardasSim | PRO | 09/27/23 06:24:39 PM UTC (Edited) | 0 ⭐ | 11864 👁️ | Never ⏰ | []
C |

2.51 KB

|

None

|

0 👍

/

0 👎

/*
test_file.txt
 
1234567890
*/
 
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
 
bool LoadFileToZTMemBufferTest( char *file_name,
                                char **p_buffer,
                                size_t *p_size )
{
 
    FILE *fp = NULL;
    *p_buffer = NULL;
    *p_size = 0;
    size_t file_size;
    size_t buffer_size;
    size_t result;
 
    fp = fopen( file_name, "rb" );
 
    if(!fp)
    {
        printf("Error: cannot open file \"%s\"\n", file_name );
        return false;
    }
 
    fseek( fp, 0, SEEK_END );
 
    file_size = ftell( fp );
 
    fseek( fp, 0, SEEK_SET );
 
    buffer_size = file_size + 1;
 
    *p_buffer = calloc( buffer_size, sizeof(char) );
 
    if( !*p_buffer )
    {
        printf("Error: memory allocation error\n");
        fclose( fp );
        return false;
    }
 
    result = fread( *p_buffer, 1, file_size, fp );
 
    if( result != file_size )
    {
        free(*p_buffer);
        *p_buffer = NULL;
        fclose(fp);
        printf("Error: error reading file\n");
        return false;
    }
 
    fclose( fp );
 
    *p_size = buffer_size;
 
 
    //v1
 
    char *p_tmp = *p_buffer;
 
    printf("(1a) %p\n", (void*) p_tmp);
 
    p_tmp += file_size;
 
    printf("(1b) %p\n", (void*) p_tmp);
 
    *p_tmp = '\0';
 
    //v2
 
    printf("(2a) %p\n", (void*) (*p_buffer + file_size) );
 
    *( *p_buffer + file_size ) = '\0';
 
    //v3
 
    (*p_buffer)[file_size] = '\0';
 
    printf("(3a) %p\n", (void*) &(*p_buffer)[file_size] );
 
 
    // test
 
    printf( "(test 1) %p\n", (void*) p_buffer);
    printf( "(test 2) %p\n", (void*) p_buffer[0]);
    printf( "(test 3) %p\n", (void*) *p_buffer);
 
 
    return true;
}
 
int main()
{
 
    char *p_buff = NULL;
    size_t size = 0;
 
    printf( "Buffer address before: %p\n", (void*) p_buff);
    printf( "Address of pointer: %p\n", (void*) &p_buff);
 
    if(!LoadFileToZTMemBufferTest( "test_file.txt", &p_buff, &size ))
    {
        printf("Error: LoadFileToZTMemBufferTest\n");
        return 1;
    }
 
    printf("Buffer size: %zu\n", size);
 
    printf( "Buffer address after: %p\n", (void*) p_buff);
 
    free(p_buff);
 
    return 0;
}
 
/*
output:
 
Buffer address before: (nil)
Address of pointer: 0x7fffc4573678
(1a) 0x561131e698a0
(1b) 0x561131e698aa
(2a) 0x561131e698aa
(3a) 0x561131e698aa
(test 1) 0x7fffc4573678
(test 2) 0x561131e698a0
(test 3) 0x561131e698a0
Buffer size: 11
Buffer address after: 0x561131e698a0
 
*/

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎