【问题标题】:The use of const char* vs. string literalsconst char* 与字符串文字的使用
【发布时间】:2020-01-03 12:43:00
【问题描述】:

我正在使用外部 Modbus 库 - 用 C 编写 - 使用串行连接从 Linux 机器连接到微控制器 Modbus 从站。我也在使用 wxWidgets 在 Linux 机器上创建一个应用程序,它在后台运行一个 Modbus 主机。

其中一个 Modbus 函数接受 Modbus 主设备应连接到的串行端口的名称。在我的 Linux 机器上,那是 /dev/ttyS4。在我使用的函数中,参数类型定义为const char*。当我将参数作为字符串文字(即"/dev/ttyS4")传递时,该函数可以正常工作。然而,当我第一次定义一个变量如下:

const char mbPort[] = {'/', 'd', 'e', 'v', '/', 't', 't', 'y', 'S', '4'};

然后将该变量传递给函数,它不起作用 - 我不确定为什么会这样。在 Windows 中以类似方式传递变量时,它工作正常。在 Windows 中,我的 mbPort 变量如下所示:

const char mbPort[] = { '\\', '\\', '.', '\\', '\\', 'C', 'O', 'M', '5' };

所以现在我不确定这是否是我的代码中的错误,或者这是否与我正在使用的操作系统有关。这是我正在使用的 Modbus 函数的声明:

modbus_t* modbus_new_rtu(const char *device, int baud, char parity, int data_bit, int stop_bit);

任何帮助将不胜感激。

【问题讨论】:

  • 请注意,"/dev/ttyS4" 将以空值结尾,而 {'/', 'd', 'e', 'v', '/', 't', 't', 'y', 'S', '4'} 则不会。
  • 感谢您的快速回复。您完全正确,将'\0' 添加到 my 变量的末尾即可解决问题!

标签: c++ linux string char constants


【解决方案1】:

将值 '\0' 添加到初始值设定项列表的末尾。也许在某些编译器版本中,内存中的数据之后恰好是零,但您不能依赖这个事实。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    相关资源
    最近更新 更多