gpt4 book ai didi

c# - String to Char* 无内存泄漏

转载 作者:太空宇宙 更新时间:2023-11-04 06:00:14 25 4
gpt4 key购买 nike

我尝试了很多方法将字符串转换为 Char*,但在将 DLL 导入 C# 项目时总是出现 2 个错误。我的 C++ DLL 的主要功能是这样的:

//Example
extern "C" __declspec (dllexport) void Conv(std::string str)
{
FFileList file_list;

char temp_path[1024];
sprintf(temp_path,"%s*",arg_path);

GetFindFileListWin(temp_path,".mrs",file_list);

}

所以,我需要将“str”转换为 char*,因为 GetFindFileListWin 是这样的:

GetFindFileListWin(char* path,char* ext,FFileList& pList);

并将其传递给 arg_path

我试着这样做:

char* arg_path = new char[str.length()+1];
strcpy(arg_path, str.c_str());
sprintf(temp_path,"%s*",arg_path);
delete[] arg_path;

但是当我在我的 C# 程序中运行 Conv() 时,它说 Windows 在 Program.exe 中触发了一个断点。这可能是由于堆损坏,这表明 Program.exe 或它加载的任何 DLL 中存在错误。(如果我使用 _strdup,也会发生同样的情况)。所以,我尝试了其他方式:

std::vector<char> Chr(str.size() + 1);
std::copy(str.begin(), str.end(), Chr.begin());
char *arg_path = &Chr[0];
sprintf(temp_path,"%s*",arg_path);

我收到Attempted to read or write protected memory消息

我的 C# 程序执行此操作:

[DllImport("Mrs.dll")]
public static extern void Conv(string str);
public void Convert(TextBox Tx)
{
Conv(Tx.Text);
}

希望有人能帮我解决这个错误,提前致谢。

最佳答案

我怀疑 sprintf 语句中的星号可能是导致问题的原因。 sprintf 需要格式字符串中星号的长度参数。

sprintf(temp_path,"%s*",arg_path);
^

关于c# - String to Char* 无内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20502208/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com