将 char* 传递给函数并在内存中覆盖它

Pass char* to function and overwrite it in memory

我想将字符串 (char *) 传递给 dll 中的函数以用另一个字符串覆盖它。

文件dll.cpp

__declspec(dllexport) void getString(char *name, char *buffer, int len) {

    std::string str = getString(); // buffer should be overwritten with this string
    char *cstr = new char[str.length() + 1];
    strcpy(cstr, str.c_str());
    strncpy(buffer, cstr, len);

}

文件main.cpp

char *buffer;
getString("z", buffer, 128);      
printf("%s", buffer);

我不知道如何正确传递缓冲区以覆盖它。

很明显您对指针感到困惑。看起来你使用 cstr 是为了给 buffer 一些内存,但这不会起作用,cstr 是不必要的。

这里是正确的代码,buffer在main中分配,cstr被淘汰。

char *buffer = new char[128];
getString("z", buffer, 128);      
printf("%s", buffer);

__declspec(dllexport) void getString(char *name, char *buffer, int len)
{
    std::string str = getString();
    strncpy(buffer, str.c_str(), len);
}

请注意,strncpy 是一个危险的函数,因为它不能保证输出以 nul 终止。我更愿意看到这样的代码

__declspec(dllexport) void getString(char *name, char *buffer, int len)
{
    if (len == 0)
    {
        // some kind of error handling
    }
    std::string str = getString();
    strncpy(buffer, str.c_str(), len - 1);
    buffer[len - 1] = '[=11=]';
}