gpt4 book ai didi

c - 替代在 c 中返回 malloc 的数据?

转载 作者:太空宇宙 更新时间:2023-11-03 23:49:46 24 4
gpt4 key购买 nike

在 C 中,我这里有这个函数:

// Returns human friendly byte amount
char *byteconvert(unsigned long b_) {
float b = (float) b_;
int n = 0;
while (b / 1000 >= 1) {
b /= 1000;
n++;
}
char *buffer = malloc(32);
sprintf(buffer, "%.2f%c", b, "BKMGT"[n]);
return buffer;
}

我是否只为这个函数调用分配一个变量,然后再释放它?如果我只想打印它怎么办,像这样:

int x = 123456;
printf("Size: %s\n", byteconvert(x));

如何在不发生内存泄漏的情况下执行此操作?这似乎是 C 中的一个基本问题,我只是不知道解决这个问题的正确方法。
网上找了很多类似的帖子,但是都没有一个确定的或者很好的解决办法。

最佳答案

如果你不想依赖调用者做 free然后让调用者首先传入缓冲区。

你还应该检查 n < 5在将其用作数组索引之前。

void byteconvert(unsigned long b_, char *buf, size_t buf_len )
{
...
snprintf(buf, buf_len, "%.2f%c", .....
}

关于c - 替代在 c 中返回 malloc 的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23125032/

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