Consider the following simple C program that read a file into a buffer and displays that buffer to the console:
#include<stdio.h> main() { FILE *file; char *buffer; unsigned long fileLen; //Open file file = fopen('HelloWorld.txt', 'rb'); if (!file) { fprintf(stderr, 'Unable to open file %s', 'HelloWorld.txt'); return; } //Get file length fseek(file, 0, SEEK_END); fileLen=ftell(file); fseek(file, 0, SEEK_SET); //Allocate memory buffer=(char *)malloc(fileLen+1); if (!buffer) { fprintf(stderr, 'Memory error!'); fclose(file); return; } //Read file contents into buffer fread(buffer, fileLen, 1, file); //Send buffer contents to stdout printf('%s\n',buffer); fclose(file); }
The file it will read simply contains:
Hello World!
The output is:
Hello World!²²²²▌▌▌▌▌▌▌↔☺
It has been a while since I did anything significant in C/C++, but normally I would assume the buffer was being allocated larger than necessary, but this does not appear to be the case.
fileLen ends up being 12, which is accurate.
I am thinking now that I must just be displaying the buffer wrong, but I am not sure what I am doing wrong.
Can anyone clue me in to what I am doing wrong?
You need to NUL-terminate your string. Add
before printing it.