2013-05-03 45 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