gpt4 book ai didi

c - 关于函数返回的 char 指针的最佳实践

转载 作者:行者123 更新时间:2023-12-02 07:57:25 26 4
gpt4 key购买 nike

关闭。这个问题是opinion-based .它目前不接受答案。












想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它.

1年前关闭。




Improve this question




处理返回指向 C 字符串的 malloc 指针的函数时,最佳实践是什么?

这是一个例子:

FILE *f;
char *tmp;
for (i = 0; i <= 10; i++) {
tmp = concat(fn, i);
f = fopen(tmp, "w");
free(tmp);
// read f, do something useful ...
fclose(f);
}
char* concat(char *a, int b)返回指向新 C 字符串的指针,其中包含 a 的连接和 b .

我不仅需要指定一个临时指针,然后将其传递给 fopen ,我也得 free(tmp)每次。我宁愿喜欢这样的东西:
FILE *f;
char *tmp;
for (i = 0; i <= 10; i++) {
f = fopen(concat(fn, i), "w");
// read f, do something useful ...
fclose(f);
}

但这当然会导致内存泄漏。那么这里的最佳实践是什么?像 concat(char *a, int b, char *result)哪里 result 应该是生成的 C 字符串的预分配内存?此解决方案有其缺点,例如 result 的大小有限或不是最佳大小。 .

最佳答案

更坚固的设计:

FILE *open_file_number(const char *str, int number)
{
size_t size = strlen(str) + 32;
char *path = malloc(size);

if (path == NULL)
{
return NULL;
}
snprintf(path, size, "%s%d", str, number);

FILE *file = fopen(path, "w");

free(path);
return file;
}

for (i = 0; i <= 10; i++)
{
FILE *file = open_file_number(some_path, i);

if (file != NULL)
{
// Do your stuff
fclose(file);
}
}

关于c - 关于函数返回的 char 指针的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62041776/

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