Hãy xem xét các chương trình C đơn giản sau đây mà đọc một tập tin vào một bộ đệm và hiển thị mà bộ đệm ra cửa sổ Console:Tại sao chương trình C đơn giản của tôi lại hiển thị rác thải để stdout?
#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);
}
Các tập tin nó sẽ đọc chỉ đơn giản bao gồm:
Hello World!
Đầu ra là:
Hello World ²²²²▌▌▌▌▌▌▌↔☺
Nó đã được một thời gian kể từ khi tôi đã làm bất cứ điều gì có ý nghĩa trong C/C++, nhưng thông thường tôi sẽ giả định rằng bộ đệm đã được phân bổ lớn hơn mức cần thiết, nhưng điều này dường như không đúng.
tệpLen kết thúc bằng 12, chính xác.
Tôi đang nghĩ rằng bây giờ tôi phải chỉ hiển thị bộ đệm sai, nhưng tôi không chắc chắn những gì tôi đang làm sai.
Có ai có thể cho tôi biết điều tôi đang làm không?
Lấy -1 ra và bạn đã đúng! – GEOCHET
Tôi đã cố gắng làm điều này tại một thời điểm, nhưng vì lý do nào đó có vẻ như tôi đã bị rạn não và sử dụng \ n thay vì \ 0 vì một lý do ngu ngốc nào đó. Nói với bạn tôi đã gỉ! – GEOCHET
Tôi đã bỏ lỡ bộ đệm là fileLen + 1 byte dài ... – JesperE