【问题标题】:C: combine string and float with low memoryC:结合字符串和浮点数,内存不足
【发布时间】:2020-09-30 13:32:34
【问题描述】:

我使用的是低内存 MCU,需要连接一个 char* 和一个浮点数。我试过使用 sprintf 但我认为它太笨重了,我一直在崩溃。

具体来说,我正在使用 Tiva TM4C MCU 并尝试使用图形库将传感器数据绘制到屏幕上。我试过了:

char buf[100];
float i = 2.232;
sprintf(buf, "%f", i);//
GrContextFontSet(&sContext, &g_sFontCm14);
GrStringDraw(&sContext, buf, -1, 10, 30, 0);

用最少的内存将这些结合起来的最佳方法是什么

【问题讨论】:

  • 为什么需要将结果存储到 char* 中?直接输出会不会消耗更少的内存?
  • 对不起,我正在添加新信息,正如你评论的那样。我正在尝试将 Tivaware 图形库用于 TM4C MCU。
  • 并且崩溃应该是由使用的“内存过多”产生的?
  • @Berto99 这是 TI 论坛上的建议,用户表示 sprintf 内存非常重。
  • @GrantDare need to concatenate a char* and a float 您发布的代码中没有串联。 I keep getting a crash 如果注释掉sprintf 行,并将其上面的行替换为char buf[100] = "2.232;",是否还会发生崩溃?

标签: c string memory texas-instruments


【解决方案1】:

您可以使用snprintf,它保证永远不会写入通过缓冲区的末尾

char your_buffer[64];
int ret_val = snprintf(your_buffer, sizeof your_buffer, "%f", your_float);

if (ret_val < 0) {
    return EXIT_FAILURE;
}
if (ret_val >= sizeof buffer) {
    /* you need to resize the buffer to a bigger size
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2016-12-13
    • 2012-02-03
    • 2015-03-15
    • 1970-01-01
    • 2023-03-14
    相关资源
    最近更新 更多