首页 > 解决方案 > C函数返回一个字符串

问题描述

我试图toString在 C 中创建一种这样的函数:

struct esploratore {
    char nome[20];
    char cognome[20];
    int nascita;
    int morte;
};

char *esploratoreToString(esploratore e) {
    char *s = (char*) malloc(50 * sizeof(char));
    snprintf(s, 50,
             "%s %s %d %d",
             e.nome, e.cognome, e.nascita, e.morte);
    return s;
}

并以main这种方式使用它:

printf("%s", esploratoreToString(e));

它有效,但问题是:malloc 分配的内存是否会被释放?

这是唯一的解决方案吗?

char *s = esploratoreToString(e);
...
printf("%s\n\n", s);
free(s);

标签: cmallocfree

解决方案


在您的原始代码中,不会释放内存。这是内存泄漏。

要正确调用此函数,您必须这样做

char *s = esploratoreToString(e);
printf("%s", s);
free(s);

如果您要进行esploratoreToString分配,实际上没有任何办法解决这个问题。C 中动态分配的对象永远不会释放自己。(C++ 是另一个故事……)

(当然应该在继续之前esploratoreToString检查是否成功......)malloc


推荐阅读