/*
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
0 B
|👍
/👎
0 B
|👍
/👎