Rozważmy następujący prosty program w C, który odczytać plik do bufora i wyświetlaczy, które bufor konsoli:Dlaczego mój prosty program C wyświetla śmieci na standardowe wyjście?
#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);
}
Plik będzie czytać po prostu zawiera:
Hello World!
Wyjście jest:
Hello World ²²²²▌▌▌▌▌▌▌↔☺
Minęło trochę czasu odkąd zrobił coś znaczącego w języku C/C++, ale zwykle zakładam, że bufor był przydzielany większy niż to konieczne, ale nie wydaje się, żeby tak było.
FileLen kończy się 12, które jest dokładne.
myślę teraz, że muszę być po prostu wyświetlając bufor źle, ale nie jestem pewien, co robię źle.
może ktoś mi wskazówką do tego, co robię źle?
Wyjmij -1 i masz rację! – GEOCHET
Próbowałem to zrobić w pewnym momencie, ale z jakiegoś powodu wygląda na to, że miałem mózgowy pierdziel i użyłem \ n zamiast \ 0 z jakiegoś głupiego powodu. Powiedziałem, że jestem zardzewiały! – GEOCHET
Brakowało mi, że bufor był fileLen + 1 bajt długo ... – JesperE