簡體   English   中英

無法將緩沖區的內容復制到字符串中:從C中的.bin文件讀取

[英]Cannot copy contents of buffer into string: reading from .bin file in C

我有一個函數,可以從文件中讀取一定數量的字節並將這些字節放入字符串中。 使用fread可以在緩沖區b中打印每個元素的內容,但是如果我嘗試打印整個字符串(b),則不會打印任何內容。 這是在for循環的代碼中完成的; 我打印b [i]的內容。 然后在for循環之后,我嘗試打印b,然后將b的內容放入我創建的結構中,供其他地方使用。

為什么會這樣?

void load_frame(struct Entry P[], int framenum){
char b[256];
FILE*fp;
char *temp = malloc(256);
fp = fopen("BACKING_STORE.bin", "rb");

printf("We opened the file\n");
fseek(fp, 256*framenum,SEEK_SET);

fread(b, sizeof(b), 1, fp);

fclose(fp);
int i;
printf("Looking at the contents of buffer: \n");

for(i = 0; i < 10; i ++){
    printf("%u\n", b[i]);   

}
//Print contents of whole buffer
printf("%s",b);
//b[10] = "\0";


//Put b into char* content part of structure Entry
P[framenum].content = b;
printf("Content is: %s\n", P[framenum].content);
P[framenum].frame=framenum;

}

您將間接返回指向本地數組b的指針。 當函數返回並且存儲在P[framenum].content值不再有效時,它將超出范圍。 它可以被其他功能覆蓋,因為它不再是您要使用的內存。

另外,緩沖區是否以空字節開頭? 它是否包含空字節? 這些將終止字符串。

除了泄漏內存外,目前還不清楚您正在使用temp做什么。 但是,您可以很好地利用它而不是使用b (但是您必須測試對malloc()調用是否成功)。 完成后,調用代碼將必須釋放P[framenum].content的內存。

您需要捕獲並使用fread()返回的值。 您需要驗證文件是否成功打開。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM