如何将变量传递给 const char 类型?

Posted

技术标签:

【中文标题】如何将变量传递给 const char 类型?【英文标题】:How to pass variable to const char type? 【发布时间】:2022-01-23 18:19:23 【问题描述】:
void printLCD(int col, int row , const char *str) 
    for(int i=0 ; i < strlen(str) ; i++)
      lcd.setCursor(col+i , row);
      lcd.print(str[i]);
    


void loop()
    lightAmount = analogRead(0);
    
    // Here
    printLCD(0, 0, printf("Light amount: %d", lightAmount ));

我是 arduino 项目的 c 语言新手。

我想在 LCD 上显示"Light Amount: 222"

但是printLCD函数中的第三个参数,它只能接收字符串类型,所以出错了。

如何在上述情况下同时显示变量和字符串?

【问题讨论】:

使用 Arduino String 类来处理字符串。哦,是的,Arduino 是用 C++ 编程的,而不是 C。 【参考方案1】:

printf 不返回字符串,它会将其打印到标准输出,大多数 Arduinos 默认情况下都没有配置。

您可以使用snprintf C 函数在 Arduino 草图中格式化字符串。

void printLCD(int col, int row , const char *str) 
  lcd.setCursor(col, row);
  lcd.print(str);


void loop()
    lightAmount = analogRead(0);
    
    char str[17]; // for 16 positions of the LCD + terminating 0
    snprintf(str, sizeof(str), "Light amount:%d", lightAmount);
    printLCD(0, 0, str);

   delay(100);


一些 LCD 显示库支持数字的print 函数。然后就可以了

void loop()
  lightAmount = analogRead(0);
    
  lcd.setCursor(0, 0);
  lcd.print("Light amount:");
  lcd.print(lightAmount);

  delay(100);

【讨论】:

非常感谢!现在 LCD 打印出我想要的东西。但是,如果光传感器值改变了1023 ===> 300,最后一个数字1023,“3”并没有消失。所以LCD打印3003。如果数字从4位变为3位,最后的4位数字仍然存在。你知道为什么会发生这些吗?我可以注册这个问题吗?再次感谢:) 您可以在snprintf 调用中使用“%-4d”格式来获取一个始终占据4 个位置并且左对齐的数字。或“%4d”表示右对齐数字。另外......小心调整临时缓冲区的大小......它很容易溢出并踩到其他东西。 @aMike,不会溢出的是snprintf 噢!哦耶!它是否截断字符串并不重要,因为 16x2 显示也会将其截断。感谢指正;我要回去潜伏了! :-)

以上是关于如何将变量传递给 const char 类型?的主要内容,如果未能解决你的问题,请参考以下文章

以这种格式将 argv 变量传递给 main 的结果 main( int argc, char const * argv )

我可以将 const char* 数组传递给 execv 吗?

从 unsigned const char * 类型转换为 char const *

将 const char* 传递给构造函数会给出 null

如何通过带有指针的函数传递 char 变量(示例已发送)?

如何将char赋给const char *