2013-05-03 39 views
0

在C++即時通訊新和我的一些小白問題:店FREAD()中的字符,而不是內存緩衝區

我一直試圖做一個程序,讀取ISO文件,並返回類似大小的一些信息,塊大小,塊...

我的第一個問題是關於fread,以及如何將加速信息存儲到char變量而不是緩衝區,因爲如果我在緩衝區中存儲時,當我返回字符串程序顯示文本與4'ý '字符。

如果我使用例如:

char *systemID = (char*) malloc(sizeof(char)*32); 
fread(systemID, 1, 8, infile); 

然後在結束的4個 'Y' 的作品,但如果我使用:

systemID = (char*) malloc(sizeof(char)*32); 
fread(systemID, 1, 8, infile); 

然後程序崩潰...
如何我可以將fread信息存儲到char變量中?或者我可以如何避免最後的'?'字符?

,我已經另一個問題:有人有關於ISO映像,以及如何獲取文件夾列表中的ISO裏面在C++中的信息。我想這樣做,而不運行其他程序,因爲7Zip的和其他人我能得到的文件列表,但我希望做一個獨立的程序。

預先感謝;)

回答

0

記住需要終止在C(和C++)的字符串。該fread函數返回被讀取的項目數,您可以使用,作爲一個指標來終止您的字符串:

char *systemID = malloc(32); 
size_t nread = fread(systemID, 1, 8, infile); 
if (nread > 0) 
    systemID[nread] = '\0'; /* Terminate string */ 
else 
{ 
    /* Handle end-of-file or error */ 
} 
+0

我明白了,我忘了結束字符... :),謝謝! – 2013-05-03 12:28:04