【发布时间】: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