我目前正在开发一个用c ++编写的代码,而且更多的是" C ++",我将我的char *移动到字符串。
顺便说一句,我确实有一些问题要分配价值。
一旦我将str分配给std :: string,我的代码就会崩溃。
这是代码。
std::string str;
std::cout << "Friendly\n";
str.assign(LIBMTP_Get_Friendlyname(PulsDeviceMngr->device));
if(str.empty())
PulsDeviceMngr->devicename = "Not Defined";
else {
PulsDeviceMngr->devicename = str ;
str.clear();
}
我也试图替换:
str.assign(LIBMTP_Get_Friendlyname(PulsDeviceMngr->device));
通过
str = LIBMTP_Get_Friendlyname(PulsDeviceMngr->device);
LIBMTP_Get_Friendlyname可以返回NULL,因为没有定义Friendlyname。
我迷失了......这是我第一次在c ++下使用字符串 感谢您的帮助
答案 0 :(得分:1)
确保定义了友好名称,以便它不会返回NULL。还要确保LIBMTP_Get_Friendlynam()返回string或char *类型。
答案 1 :(得分:0)
您的评论说:
似乎这是因为价值为
时分配NULL
而我尝试assign
。但是我应该有办法获得价值并且仅在empte [sic]
你的问题是:
LIBMTP_Get_Friendlyname
可以返回NULL
,但未定义Friendlyname
。
如果您传递std::string::assign
指针,例如NULL
,它将尝试使用C-String重载。 C-String重载将从引用的数组中复制字符,直到它达到空字符。但是你的代码已告诉它C-String位于地址0,当解除引用时会出现段错误。
解决方案是返回您之前返回NULL的""
。
这将确保始终有一个字符串assign
。