Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- 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
- */
Advertisement