构建一个长字符串作为参数传递给函数
building a long string to be passed to function as argument
我对使用 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&)'
我应该如何构建一个将不同变量连接在一起的长数组?
看来你确实在写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 += "');";
只要函数调用需要 const char*
,就使用 INSERT_SQL.c_str()
。
std::strings 设计得相当糟糕,很难构建一个。
但是你有旧的 C 函数 sprintf。这需要参数并且非常灵活,并且提供了一种构建复杂字符串(例如 sql 查询)的简单方法。构建字符串后(无论您选择哪种方法)打印出来以检查它是否正确。
然后您可以将字符数组字符串转换为 std::string 以供传递。 std::strings 很适合。
代码如下所示
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;
我对使用 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&)'
我应该如何构建一个将不同变量连接在一起的长数组?
看来你确实在写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 += "');";
只要函数调用需要 const char*
,就使用 INSERT_SQL.c_str()
。
std::strings 设计得相当糟糕,很难构建一个。
但是你有旧的 C 函数 sprintf。这需要参数并且非常灵活,并且提供了一种构建复杂字符串(例如 sql 查询)的简单方法。构建字符串后(无论您选择哪种方法)打印出来以检查它是否正确。
然后您可以将字符数组字符串转换为 std::string 以供传递。 std::strings 很适合。
代码如下所示
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;