构建一个要传递的长字符串作为参数

时间:2016-12-18 02:27:27

标签: c++ arrays string char concat

我是用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 个答案:

答案 0 :(得分: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*

答案 1 :(得分:1)

std :: strings设计得很差,很难建立一个。

但是你有旧的C函数sprintf。这需要参数并且非常灵活,并且提供了一种简单的方法来构建复杂的字符串,例如sql查询。构建完字符串后(无论选择哪种方法)将其打印出来以检查它是否正确。

然后,您可以将字符数组字符串转换为std:;字符串以进行传递。 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;