I somehow cannot ofset from SEEK_CUR
:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
FILE * fp = fopen("txt", "w+b");
if(!fp)
return 1;
fprintf(fp, "20");
fseek(fp, 1, SEEK_CUR);
fprintf(fp, "19");
long size = ftell(fp) + 1;
rewind(fp);
char * buf = malloc(size+1);
buf = memset(buf, 0, size+1); //should I really do this? becuase, after the "20" there will be \0 so I won't see the rest (` 19`)
fread(buf, sizeof(char), size, fp);
printf("%s\n",buf);
}
output:
20
but should be 20 19
, which I cannot fread()
from that file, why?
So you write "20" to the file, then skip one byte/character ahead in the file, then write "19" to the file. The skipped character needs to be written as some value... and that value is
\0
.So you read "20\019" from the file into a buf initialized to seven
\0
bytes by thememset
call.buf
now contains"20\019\0\0"
.printf("%s\n", buf)
printsbuf
as a NUL terminated string, i.e. until the first NUL byte appears. That NUL byte comes immediately after the "20", so it only prints "20".If you were to hexdump the buffer with a hexdump function (to be written as an exercise)
it would print something like