【问题标题】:Convert const char* to binary operator+将 const char* 转换为二元运算符+
【发布时间】:2016-06-22 18:13:27
【问题描述】:

我一直在试图找出 T1P1 的正确数据类型(见下文)。

编译器错误:

weather_station_v1_2.ino:76:37: error: invalid operands of types ‘const char*’ and ‘const char [11]’ to binary ‘operator+’

代码:

if (status != 0) {
      delay(status);
      status = pressure.getPressure(P,T);

      const unsigned char P1 = pressure.getTemperature(P);
      const unsigned char T1 = pressure.getTemperature(T);

      byte data = "temp" + T1 + "&pressure=" + P1;
      httppost();
      delay(1000);
    }

最后data 将被发送到PHP 服务器,但它必须遵循name1=value1&name2=value2 的方案。

你会不会这么好,给我一个提示我做错了什么? 谢谢

【问题讨论】:

  • 你需要snprintf()吗?
  • 是的,看起来很xD

标签: c string arduino concatenation


【解决方案1】:

您的问题不在于数据类型转换,而是在 C 中,运算符 + 仅用于算术运算(添加数字或向指针添加偏移量)。

您正在尝试连接字符串。 C 中没有内置“字符串”类型。C 中的“字符串”是字符数组,通常以 0 字节结尾。 C 中的数组是固定大小和固定分配的,因此 C 中没有数组“连接”运算符。

对数组的操作,以及对C“字符串”的操作,通常是通过操作函数来实现的。在您的特定情况下,通常的方法是使用printf 系列的字符串格式化函数。你应该看看snprintf

【讨论】:

  • 每个 OP 请求的好“提示”答案。 UV (Quibble: 不同意 ""strings ... 通常以 0 字节结尾"。在 C 中,strings 总是 以空字符结尾,否则它不是字符串。)
  • 感谢您的帮助,我的代码现在可以工作了 :) if (status != 0) { delay(status); status = pressure.getPressure(P,T); const unsigned char P1 = pressure.getTemperature(P); const unsigned char T1 = pressure.getTemperature(T); char buffer [100]; byte data = snprintf(buffer, 100, "temp=%T1&pressure=%P1", T1, P1); httppost(); delay(1000); }
  • @hehxes "temp=%T1&pressure=%P1" 是一种不寻常的格式。确定有效吗?
  • @chux:是的,C 标准定义了不是初始化器的 const 字符串文字总是以 0 字节结束。然而这个char hello[5] = "hello"; 是完全合法的,但不会以0 字节结束。就标准库str… 函数而言,这当然不是字符串。什么是字符串,什么不是字符串的边界有点模糊。恕我直言,使用带内信令 0 字节终止符是 C 设计过程中最糟糕的决定之一。当然,必须明确地拖动长度很烦人,但它可以防止这么多安全漏洞。
  • "hello"字符串文字,不一定是 字符串。 True C 的术语很模糊。
猜你喜欢
  • 2013-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-16
  • 2015-08-05
  • 1970-01-01
相关资源
最近更新 更多