【问题标题】:Invalid conversion from char to const char*从 char 到 const char* 的无效转换
【发布时间】:2013-11-10 11:12:04
【问题描述】:

提前抱歉,我觉得这将是一个非常简单的问题,但我已经坚持了好几个小时,我无法根据我的资料找出如何解决它在这里或谷歌上找到。

我有一个连接到 GPS 和收音机的 arduino,并试图将 GPS 信号广播到我的收音机。我现在要做的是将 GPS 中的 NMEA 语句放入变量“文本”中,但我对这个错误感到困惑,我认为这是由于数组造成的。

我的错误发生在这一行: sprintf(text, char(c));

我尝试了一些不同的方法,但这就是我目前遇到的问题。任何帮助将不胜感激。

#define RADIOPIN 13
#include <string.h>
#include <util/crc16.h>
#include <Adafruit_GPS.h>
#include <SoftwareSerial.h>

SoftwareSerial mySerial(3, 2);

#define GPSECHO  true

Adafruit_GPS GPS(&mySerial);

char datastring[80];
char text[80];

void setup() {
  Serial.begin(115200);
  GPS.begin(9600);
  GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA);
  GPS.sendCommand(PMTK_SET_NMEA_UPDATE_5HZ);
  delay(3000);  
  pinMode(RADIOPIN,OUTPUT);
}

void loop(){
  gpscheck();
}

void gpscheck(){
    char c = GPS.read();
    if (c) {
//      Serial.print(c); 
    sprintf(text, char*(c));
    Serial.print(text);
    }
}

【问题讨论】:

  • GPS.read() 只会返回一个字符或一个字符串?
  • sprintf(text, char*(c)); 错了!了解它的用法here

标签: c++ c arduino arduino-ide


【解决方案1】:

您可能想阅读sprintf 的参考资料。然后你会看到第二个参数是一个字符串

所以下面的就好了:

sprintf(text, "%c", c);

为了安全起见,您可能希望改用snprintf,以降低缓冲区溢出的风险。

当然,对于单个角色,你也可以这样做

text[0] = c;
text[1] = '\0';  /* Terminate string */

【讨论】:

  • 谢谢!我也一直在玩这个并尝试过: sprintf(text, "%d", c);这是我从 sprintf 文档中得到的。我知道它会随着变量的类型而变化。
【解决方案2】:
sprintf(text, char*(c));

如果要打印字符

simply use printf("%c",c);

如果你想把它复制到文本中

sprintf(text,"%c", c);

【讨论】:

    猜你喜欢
    • 2017-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-05
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多