【问题标题】:c++ copy string literal (from C) [closed]c ++复制字符串文字(来自C)[关闭]
【发布时间】:2018-10-19 10:44:24
【问题描述】:

我想将 C 字符串保存到 C++ 变量中。然后将其传递给 C-API 函数。

字符串在 C-API 中定义 作为

#define  XI_PRM_BINNING_HORIZONTAL_MODE         "binning_horizontal_mode"

我想在开关中选择字符串

char * binnMode;
...
binnMode = XI_PRM_BINNING_HORIZONTAL_MODE;

但这失败了,因为 C 字面量被定义为 char str[] (C++11)

我想将字符串传递给期望的函数

xiSetParamInt(IN HANDLE hDevice, const char* prm, const int val)

我需要如何定义binnMode 才能使其正常工作?

【问题讨论】:

  • 什么“失败”?请包括逐字错误消息,甚至更好:显示minimal reproducible example
  • binnMode 指向的数据应该是 const:const char * binnMode
  • const char * binnMode; ?

标签: c++ c char


【解决方案1】:

注意参数是const char*,而不是char*

这很方便,因为这也是 binnMode 需要的。

字符串文字是不可变的,并且(在 C++ 中)const。你的是const char[<length+1>](不知道你在哪里听说它是char[]),它很好地衰减为const char*

【讨论】:

  • “不知道你在哪里听说它是 char[] - 直到今天它还在 C 中。但是修改它是UB。很傻,真的。
  • @StoryTeller:我引用:“C 字面量定义为char str[] (C++11)”
  • 我敢肯定,在贝叶挂毯出现之前,挂毯中的字符串是不可变的......
  • 坦率地说,完整的句子是在 OP 方面造成混淆的。双重标记让我相信 OP 在这里考虑的是 C。不是对您的回答的批评:)
  • 总 OT-pedantry - “AD”应该年份编号(AD 1066)之前,而不是像“BC”那样跟随它。
猜你喜欢
  • 2011-11-15
  • 2021-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-29
  • 2021-11-03
  • 1970-01-01
相关资源
最近更新 更多