gpt4 book ai didi

c编程malloc问题

转载 作者:太空宇宙 更新时间:2023-11-04 05:31:21 24 4
gpt4 key购买 nike

刚刚得到关于 c malloc() 函数的查询。我正在读取()从文件中读取 x 字节数以获取文件名的长度,例如' read(file, &namelen, sizeof(unsigned char)); ' .

变量 namelen 是一个 unsigned char 类型,并作为该类型(1 字节)写入文件。现在 namelen 具有文件名的长度,即如果文件名为“data.txt”,则 namelen=8,最后加上额外的/0,工作正常。

现在我有一个记录文件信息的结构,即文件名、文件长度、内容大小等。

   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] 成为其类型 unsigned char 的大小。我希望它是存储在变量 &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);

当我尝试使用 files[i].name 变量打开 () 文件时,它不会打开,因此数据似乎没有写入 read() &files[i].name 和 strlen() 导致分割错误以及尝试打印文件名

最佳答案

  1. 一个字符串是 strlen(name) + 1 字节长(因为终止 \0)。
  2. 如果 namelen = strlen("data.txt")(即 8),那么您必须分配 files[i].name = malloc(namelen + 1)
  3. 您使用malloc() 分配的任何内存都是未定义。您不能对刚刚分配的内存执行strlen() - 您必须首先设置您分配的内存
  4. 只有在分配内存后,您才能使用内存,即 strncpy( files[i].name, "data.txt", namelen + 1 ) 只有然后你可以 strlen( files[i].name )

关于c编程malloc问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4625513/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com