c ++字符串 - 赋值崩溃

时间:2014-12-22 11:01:55

标签: c++ string std

我目前正在开发一个用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 ++下使用字符串 感谢您的帮助

2 个答案:

答案 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