c++ - 将 std::string 转换为 char* 的问题
问题描述
我正在尝试使用连接到串行通信的设备。一个用来打开通讯端口的 API 是这样的
int OpenComport(char * comport, int baudrate);
所以最初,我在我的配置文件中的某处定义了 comport
//// my config file
#define COMPORT "/dev/ttyUSB0"
//// inmy settings file
settings->serveraddr_spad = COMPORT;
认为我已经正确设置了所有东西,我开始将字符串转换为 const char,然后转换为向量(见下文)。
//// in my usage file
std::vector<char> portchar((settings->serveraddr_spad).c_str(),
(settings->serveraddr_spad).c_str() +
(settings->serveraddr_spad).size() + 1);
if(OpenComport( &portchar[0], settings->serverbaud_spad))
{
// do my action
}
所有这些似乎都与编译器一致,并且运行顺利。但是在执行时,我发现端口没有打开。
相反,当我切换到这种在前面声明 char 数组的用法时,它可以工作(下)
char portchar[13] = "/dev/ttyUSB0";
if(OpenComport( portchar, settings->serverbaud_spad))
{
// do my action
}
我的问题是如何将 std::string 转换为 char* 以供使用?
问候
解决方案
您几乎永远不需要vector<char>
,而只需使用:
if(OpenComport( (char*) settings->serveraddr_spad.c_str(), settings->serverbaud_spad))
推荐阅读
- kotlin - 确定两个列表是否包含相同的不同项目
- python - 返回类型取决于输入列表项类型的类型提示函数
- html-framework-7 - Framework7导航不起作用
- azure-web-app-service - 将 ASP.NET Core 5 应用程序从 Windows 移动到 Linux 后出现 InvalidCastException
- textbox - 防止从文本框和您的应用程序 vb.net 失去焦点
- http - Access-Control-Max-Age 不适用于授权标头
- php - Cakephp 3 搜索功能
- typescript - Typescript 中私有方法的类型安全装饰器
- .net - 在 EF Core 中覆盖多对多记录的有效方法
- angular - 当它用于同一指令的多个实例时,如何仅创建一个 HostListener 实例