gpt4 book ai didi

c - 如何使用文件和 malloc 构造函数

转载 作者:行者123 更新时间:2023-12-01 23:33:14 25 4
gpt4 key购买 nike

如果我有一个处理文件和指针的函数,如下所示:

int funzione (int *vet)
{
FILE *fin;

if ( !(fin = fopen(name, "r")) )
return 1;

/* read informations from file (like num) */

vet = (int *) malloc (num*sizeof(int));

/* ... */

return fclose(fin);
}

如何返回 vet?谢谢。

最佳答案

如果你想通过返回值本身以外的方式返回它,你可以简单地传入一个指针并取消引用它。

C 严格按值传递(赋予函数的所有内容都是原始函数的副本,对它的更改不会反射(reflect)回调用者)但您可以模拟传递-通过指针引用。你会看到这样的东西:

int funzione (int **pVet)
{
FILE *fin;

if ( !(fin = fopen(name, "r")) )
return 1;

/* read informations from file (like num) */

*pVet = malloc (num * sizeof(int));

/* ... */

return fclose(fin);
}

你会这样调用它:

int *myVet;
int result = funzione (&myVet);

您会注意到我还从 malloc 中删除了返回时的转换 - 在 C 中执行此操作是个坏主意,因为它可以隐藏某些细微的错误。

你不应该错误地认为,因为你传递了一个 int 指针,它会反射回来。如果您要更改的是 int,那也没关系。但是,由于您要更改的是 int 指针,因此您需要一个指向它的指针。


但是,请记住,在涉及指针的情况下,返回错误的常见方法是简单地返回 NULL。这是否适合您的情况是您必须决定的事情。如果可能的话,我会考虑返回指针本身并使用 NULL 作为数据不可获取的指示(无法打开文件,无法分配内存,数据不知何故错误,无法关闭文件等等) .

那会是这样的:

int *funzione (void) {
FILE *fin = fopen(name, "r");
if (fin == NULL) return NULL;

/* read informations from file (like num) */

int *pVet = malloc (num * sizeof(int));
if (pVet == NULL) return NULL;

// Populate pVet as needed. Any error must free it before
// returning NULL, such as with:

if (fclose(fin) != 0) {
free (pVet);
return NULL;
}

return pVet;
}

关于c - 如何使用文件和 malloc 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21069964/

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