【发布时间】:2021-08-03 19:47:07
【问题描述】:
我正在尝试在 Ansys Scade Suite 中将 float32 转换为 char[255]。我在这里使用了一个自定义函数,它接受一个 float32 输入并输出一个 255 的 char 数组。它可以在下面看到。
#include <stdlib.h>
#include "kcg_types.h"
kcg_char OP_StringToFloat(
/* string/ */ const kcg_float *d
)
{
kcg_char a[255];
sprintf(a, "%f", d);
return a;
}
kcg_char 是一个字符。
由于某种原因,自定义函数使程序崩溃,留下无法追踪的系统错误 (SYSERR)。任何使用 Scade Suite 的人都可以帮助我吗?这是基于模型的编程顺便说一句。这是连接的外观。 Model
【问题讨论】:
-
你不能从函数中返回一个本地数组,因为它将不再存在。您必须将缓冲区传递给函数,或者为一个缓冲区分配内存。请参阅Function returning address of local variable error in C。
-
另外,你的函数接收一个指向浮点类型的参数,然后你将指向浮点的指针传递给 sprintf() 但 sprintf() 想要一个浮点,而不是指向-浮动。
-
编译器不会发出一些警告吗?
sprintf的参数不匹配或本地对象的返回地址?可以提高警告级别吗? -
@kkrambo 那么将其设为引用会更好,还是有办法将其作为类型指针在 sprintf 中浮动?
-
取消引用指针是
sprintf(..., *d)。但是您的主要问题是返回不再存在的堆栈变量的地址,并且返回类型是单个字符而不是字符串。返回类型应为kcg_char *。如何处理a不是很清楚。 (参见第一条评论中的链接)如果调用者立即复制结果字符串,您也可以将a声明为static作为快速而可怕的修复方法。