【问题标题】:How to return sprintf? [duplicate]如何返回 sprintf? [复制]
【发布时间】:2019-02-03 05:08:10
【问题描述】:

我想知道是否有人可以让我知道返回 sprintf 字符串的最佳方式。

所以(我认为)我理解为什么这根本不起作用,这是因为一旦函数运行,堆栈上的所有内容都会被破坏,所以缓冲区会返回注意。

我有几个类似的函数,如下面的一个,我不知道应该如何返回 sprintf 字符串。我应该为每个函数分配缓冲区吗?

const char* gradeCheck(double mark) {
    char buffer [100];
    if (mark > MAX_MARK || mark < MIN_MARK) {
        sprintf(buffer, "INVALID TYPE\n");
        return buffer;
    } else if (mark >= PASSING_MARK && mark <= MAX_MARK) {
        sprintf(buffer, "Student achieved %.2lf\n", mark);
        return buffer;
    } else {
        sprintf(buffer, "Student achieved %.2lf which means they failed ;(\n", mark);
        return buffer;
    }
}

【问题讨论】:

  • char buffer [100]; 被声明为gradeCheck 的本地,并且在函数返回后其内存不再有效。分配buffer,例如char *buffer = malloc (100 +1);(别忘了验证分配是否成功——或者将buffer作为参数传递给函数)
  • @DavidC.Rankin 谢谢先生的解释,让它工作。祝你有美好的一天!
  • (别忘了free你分配的内存不再需要时:)

标签: c


【解决方案1】:

您现在尝试的方式行不通,因为buffer 位于该函数的堆栈中,并且在函数返回后不再存在。

如果你想从一个函数返回一个数组,你可以将它声明为static,这样它就会进入进程的数据部分而不是堆栈,或者使用malloc(100)分配它,然后再分配free 完成后在调用代码中。

【讨论】:

    猜你喜欢
    • 2013-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-17
    • 1970-01-01
    • 2014-12-11
    • 2012-01-23
    • 1970-01-01
    相关资源
    最近更新 更多