这是我的代码的一部分:
extern "C" REGISTRATION_API int extreme(char* lKey)
{
string s1;
char *p=NULL;
try
{
ifstream myfile ("extreme.txt");
int i=0;
if (myfile.is_open())
{
while (getline(myfile,s1))
{
switch (i)
{
case 1:
strcpy(p,s1.c_str());
lKey=p;
break;
//continue here
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在当我从外部应用程序调用此函数时,我收到此错误:
AccessViolationException:
尝试读取或写入受保护的内存.这通常表明其他内存已损坏.
问题是由于这个原因:
lKey=p;
Run Code Online (Sandbox Code Playgroud)
我怎样才能分配lKey到p?
Ale*_*ler 11
您需要预先分配传递给的内存strcpy.即,p = new char[s1.length()+1];它将做它(终止0字符的+1).但是,std::string没有充分理由混合和C字符串例程并不是一个好主意.更好的坚持std::string,它将为您省去很多麻烦.
也lKey=p不会工作 - 它只是将本地地址复制p到局部变量lKey.来电者甚至不会看到差异.
请记住,a char*只是内存位置的地址.您需要在该地址分配内存.
在您的代码中,您没有分配使用的内存,并且您没有将p设置为指向该内存地址.
strcpy 不分配缓冲区,只需要一个内存地址来复制数据.
如果你将缓冲区传递给函数,那么你可能只需要这个(并删除p)
strcpy(lKey, s1.c_str());
Run Code Online (Sandbox Code Playgroud)