我正在讀取檔案的內容并嘗試列印它,但它提供了額外的垃圾值。
#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>
#include <stdlib.h>
int main() {
long length;
char* content;
FILE *file = fopen("text.txt", "r");
fseek(file, 0, SEEK_END);
length = ftell(file);
fseek(file, 0, SEEK_SET);
content = (char *)malloc(length);
fread(content, 1, length, file);
printf("%s\n", content);
return 0;
}

也許我必須空終止content[length] = '\0';?
\n檔案末尾的換行符越多,我得到的垃圾就越多。
任何解決方案,除了使用calloc?
uj5u.com熱心網友回復:
#define _CRT_SECURE_NO_DEPRECATE如果那是MSVC (由 獲取檔案大小并沒有考慮到這一點。使用實際讀取的字符數來終止字串。
content = malloc(length 1); // room for terminator
size_t bytes = fread(content, 1, length, file);
content[bytes] = '\0';
uj5u.com熱心網友回復:
檔案內容不以空字符結尾。您應該將分配的記憶體緩沖區重置為 0,因為不知道將讀取多少位元組。
content = (char *)malloc(length 1);
memset(content, 0, length 1);
fread(content, 1, length, file);
或者您應該在列印時設定資料長度
length = fread(content, 1, length, file);
printf("%.*s\n", length, content);
請參閱有沒有辦法指定使用 printf() 列印出字串的多少個字符?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/530136.html
標籤:C指针malloc恐惧
上一篇:洗掉C中鏈表中的相鄰重復項
