2017-01-25 2 views
0

j'ai eu la configuration suivante plus tôt:définition type char et et en utilisant avec 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("');"); 

Et plus tard, je convertissait à carboniser comme ceci:

const char *mycharp = INSERT_SQL.c_str();

qui j'ai réalisé une mauvaise approche Comme dans toutes les itérations de la fonction de boucle de arduino MCU, cela consomme plus de mémoire!

Donc, j'ai décidé de changer INSERT_SQL en caractère au lieu de le déclarer String à la première place.

J'initialisées INSERT_SQL en tant que char comme ceci:

char INSERT_SQL[295]; 

Parce que je compris la longueur totale ne serait pas plus de 295,

Mais quand compilateur atteint la ligne:

INSERT_SQL = ""; 

J'ai une erreur en disant:

types incompatibles dans l'affectation de « const char [1] » à « char [295] »

Ainsi, c'est la première chose que je dois est de fixer et d'autre part, je pense que je ne peux pas utiliser concat avec ombles type de données, alors dans ce cas, comment puis-je remplir les valeurs à la requête sql en utilisant sprintf?

+1

Qu'est-ce que je 'réalisé mal comme dans avery itération ce consommera plus de mémoire' ça veut dire! – SergeyA

+0

Je me rends compte que vous avez tort .... Utilisez 'string' à nouveau. Et "réserve" de l'espace pour de meilleures performances lors de l'ajout. –

+0

Envisagez d'utiliser ['std :: ostringstream'] (http://www.cplusplus.com/reference/sstream/ostringstream/) à la place. –

Répondre

0

Le compilateur vous indique exactement ce qui ne va pas.

char INSERT_SQL[295]; 
INSERT_SQL = ""; 

Vous voulez sans doute faire comme:

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

En utilisant ':: strcat (INSERT_SQL," INSERT INTO .... 'quel espace de noms' strcat' utiliserait-il? Ne dois-je pas être explicite? –

+0

strcat() est un standard C fonction de bibliothèque définie dans string.h Toutes les fonctions C sont dans la portée globale du nom Vous n'avez pas besoin d'ajouter "::" au début, si vous ne le souhaitez pas. – JazzSoft