刚刚得到关于c malloc()函数的查询。我从文件中读取()x字节数来获得长度的文件名,如'read(文件,& name,sizeof(unsigned char)); '。c编程malloc问题
变量namelen是一个无符号字符类型,并作为该类型(1字节)写入文件。现在namelen的文件名长度如果namelen = 8,如果文件名是'data.txt',加上额外的/ 0结束,工作正常。
现在我有一个结构的录音文件信息,即文件名,filelenght,内容大小等
struct fileinfo
{
char *name;
...... other variable like size etc
};
struct fileinfo *files;
问:我想做出files.name变量namelen即大小为8,所以我可以成功把文件名写入它,就像'files [i] .name = malloc(namelen)'
然而,我不希望它是malloc(sizeof(namelen)),因为它会使它file.name [1]作为其类型的无符号字符的大小。我希望它是存储在变量& namelen中的值,即8如此file.name [8],因此data.txt可以从文件读取()为8字节并直接写入file.name [8?
有没有办法做到这一点我当前的代码是这样,返回4个不是8
files[i].name = malloc(namelen);
//strlen(files[i].name) - returns 4
//perhaps something like
malloc(sizeof(&namelen)) but does not work
感谢您的任何建议
试过提出建议的家伙,但现在我得到一个分段错误使用:
printf("\nsizeofnamelen=%x\n",namelen); //gives 8 for data.txt
files[i].name = malloc(namelen + 1);
read(file, &files[i].name, namelen);
int len=strlen(files[i].name); printf("\nnamelen=%d",len);
printf("\nname=%s\n",files[i].name);
当我尝试打开()与文件中的文件[I]。名称变量,它不会开这样的数据不会出现读取里面要获取写入()&个文件[I]。名称和strlen的()导致segemntation误差以及要打印的文件名
更新了我有关您的分段故障的答案。 – maxschlepzig 2011-01-07 14:52:46