将fread()存储在char而不是内存缓冲区中

时间:2013-05-03 12:20:34

标签: visual-c++

我是c ++的新手,我有一些noob问题:

我试图做一个读取ISO文件的程序并返回一些信息,如大小,块大小,块......

我的第一个问题是关于fread,以及如何将readed信息存储到char变量而不是缓冲区,因为如果我在缓冲区中存储,当我返回字符串时,程序会显示带有4'ý'字符的文本。

如果我使用例如:

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

然后使用4'ý'结束,但如果我使用:

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

然后程序崩溃......
我如何将fread信息存储到char变量中?或者我如何避免最后的'ý'字符?

我的另一个问题是:有人知道ISO映像以及如何在c ++中获取ISO内的文件列表。我想在没有运行其他程序的情况下这样做,因为使用7Zip和其他我可以得到一个文件列表,但我想做一个独立的程序。

提前致谢;)

1 个答案:

答案 0 :(得分: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 */
}