2016-12-18 3 views
0

Я новичок в программировании на C++, у меня естьстроит длинную строку, чтобы передать, чтобы функционировать в качестве аргумента

char INSERT_SQL[60]; 

, а затем в коде

INSERT_SQL = "INSERT INTO 'tempLog' ('temperature', 'humidity') VALUES ('"; 
    INSERT_SQL.concat(tempInC); 
    INSERT_SQL.concat("','"); 
    INSERT_SQL.concat(humidity); 
    INSERT_SQL.concat("');"); 

после значений температуры и влажности обновлены.

, но я получаю сообщение об ошибке говорящего invalid array assignment

, если я использую String INSERT_SQL; вместо Char INSERT_SQL[60]; я получаю эту ошибку:

нет соответствия функции для вызова к 'Connector::cmd_query(String&)'

как я должен построить длинный массив, который объединяет разные переменные вместе?

ответ

2

Похоже, вы действительно пишете C++ (согласно Connector::cmd_query(String&)). Таким образом, вы можете использовать std::string.

std::string INSERT_SQL; 
/* later */ 
INSERT_SQL = "INSERT INTO 'tempLog' ('temperature', 'humidity') VALUES ('"; 
INSERT_SQL += tempInC; 
INSERT_SQL += "','"; 
INSERT_SQL += humidity; 
INSERT_SQL += "');"; 

Использование INSERT_SQL.c_str() всякий раз, когда const char* требуется для вызова функции.

+0

спасибо, что работает за исключением того, что приводит к неправильной строке тузды –

1

std :: строки довольно плохо разработаны, и их сложно построить.

Однако у вас есть старая функция c sprintf. Это принимает аргументы и является чрезвычайно гибким и обеспечивает простой способ построения сложной строки, такой как sql-запрос. После создания строки (какой бы метод вы ни выбрали) распечатайте ее, чтобы убедиться, что она правильная.

Затем вы можете преобразовать строку массива символов в строку std:; для передачи. std :: строки хороши для этого.

код выглядит следующим образом

char query[1024]; // give yourself plenty of space; 

    int tempInC; // I'm guessing these will in fact be integers, not strings 
    int humidity; 
    sprintf(query, "\"INSERT INTO 'tempLog' ('temperature', 'humidity') 
      VALUES(' %d, %d);\n\"", tempInC, humidity); 

    printf("%s\n", query); // take a look, is the string right? 

    // this interface takes a plain char * 
    Connector::cmd_query(query); 

    // you can just assign to a std string if you want to keep the query 
    // string hanging about. std::strings are better than char buffers for 
    // medium-length persistent strings. 

    std::string savequery = query;