将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
,而消除了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] = ' ';
}
相关文章:
- C++自动内存 malloc 和免费覆盖问题
- 内存覆盖在我自己的 Vector 类中
- 使用放置 new 覆盖内存中的对象
- 用new分配4k int后的内存覆盖
- 初始值设定项列表覆盖动态多维数组的内存
- 内存将被代码中的溢出覆盖
- 动态分配的内存-C 覆盖
- 销毁时执行自动内存覆盖的模板
- 如何使用 CUDA 推力执行策略覆盖推力的低级设备内存分配器
- 通用内存分配崩溃,用于覆盖C++中的新建和删除
- 内存映射文件,保护单个视图不被覆盖
- 将DWORD写入内存只覆盖1个字节,而不是4个字节
- 当我们开始覆盖内存时,对象的生命周期是否已经结束?
- 设计一个内存覆盖检测工具
- 奇怪的C堆栈内存覆盖
- 如何覆盖一般malloc,所以我得到行号打印在内存泄漏打印输出
- C++ strncpy 参数 "optimized out" ;覆盖随机内存
- 什么是覆盖共享内存
- 卡洛克覆盖了另一个变量的内存?
- 分配结构数组后覆盖的内存