定义char数据类型,并与sprintf一起使用



我之前有以下设置:

String INSERT_SQL = "";
// inserting to sql database on mysql server
INSERT_SQL = "";
INSERT_SQL.concat("INSERT INTO arduinoSensorData.sensorLog (out_temperature, out_humidity, ");
INSERT_SQL.concat(" drwngRoom_temperature, drwngRoom_humidity, pot1_soilMoisture, pot1_avg_SoilMoisture,");
INSERT_SQL.concat(" wateringPot1) VALUES ('");
INSERT_SQL.concat(outdoorTempInC);
INSERT_SQL.concat("', '");
INSERT_SQL.concat(outoorHumidity);
INSERT_SQL.concat("', '");
INSERT_SQL.concat(indorTempinC);
INSERT_SQL.concat("', '");
INSERT_SQL.concat(h);
INSERT_SQL.concat("', '");
INSERT_SQL.concat(val);
INSERT_SQL.concat("', '");
INSERT_SQL.concat(avgVal);
INSERT_SQL.concat("', '");
if (wateringBasedOnAlarm){
waterMsg = "water based on alarm";
} else waterMsg = soilMsg;
INSERT_SQL.concat(waterMsg);
INSERT_SQL.concat("');");   

后来,我把它转换成这样的字符:

const char *mycharp = INSERT_SQL.c_str();

我意识到了错误的方法,因为在arduino MCU的循环函数的每次迭代中,这将消耗更多的内存!

所以,我决定将INSERT_SQL更改为char,而不是首先将其声明为String

我将INSERT_SQL初始化为如下字符:

char INSERT_SQL[295];

因为我意识到总长度不会超过295,

但当编译器到达以下行时:

INSERT_SQL = "";

我得到一个错误说:

将"const char[1]"分配给"char[295]"时的不兼容类型

所以,我首先需要修复它,其次,我认为我不能将concat与char数据类型一起使用,那么在这种情况下,我如何使用sprintf将值填充到sql查询中?

编译器准确地告诉您哪里出了问题。

char INSERT_SQL[295];
INSERT_SQL = "";

你可能想这样做:

char INSERT_SQL[295];
INSERT_SQL[0] = 0x00;
::strcat(INSERT_SQL, "INSERT INTO....

最新更新