如何将LPCSTR传递给c ++函数转换为字符串并返回LPCSTR?

时间:2015-05-29 21:44:34

标签: c++ string installshield installscript lpcstr

我有一个C ++ API函数,由Install Shield通过InstallScript调用:

SQLHELPER_API LPCSTR GetAvailableAppName(LPCSTR appNameP)
{
    //return "this works just fine";
    std::string newAppName = "I work, maybe?";
    LPCSTR returnVal = newAppName.c_str();
    return returnVal;
}

唯一返回的是空字符串。如果我只是返回传递变量" appNameP"它也会恢复正常。

我的主要问题是我需要传入LPCSTR并对其执行一些字符串操作。

1 个答案:

答案 0 :(得分:4)

LPCSTRconst char *相同。

将类似C风格的字符串传递给函数调用很好。

返回指向本地函数变量的指针并不合适,因为在函数结束后该局部变量不再存在。只要您在main中使用指针(或者在调用该函数时),它就会指向不再属于您的内存,并且该值可能已经更改。

有几种可能性,每种都有缺点:

  1. 仅使用你作为参数获得的内存(例如appNameP,因为这必须是来自外部的东西,并且在函数结束后仍然存在)。缺点:您需要传递适合此目的的东西=>函数签名或至少参数的要求发生变化,并且您要检查/更改它的调用方式。

  2. 使用new分配内容。缺点:在某个地方以后,在外面,delete[]必须被召唤。

  3. 返回std::string之类的内容。缺点:在#1中,函数签名会发生变化,您可以更改它的调用方式。

  4. 如果InstallShield本身调用此函数:

    InstallShield期望您做的事情应该在文档中的某个位置。