C++ c+中strcpy函数的异常+;控制台程序

C++ c+中strcpy函数的异常+;控制台程序,c++,exception,strcpy,C++,Exception,Strcpy,strcpy()中的异常 你能帮我解决吗?str2是一个未初始化的指针strcpy不分配内存,因此当前正在尝试写入您不拥有的任意地址,并且很可能无法通过代码写入 在调用strcpy之前,您需要将str2指向有效内存 str2 = (char*)malloc(str.size()+1); strcpy(str2,str.c_str()); 您还应该稍后在程序中释放内存 free(str2); // cannot dereference str2 after this point 问题是,您通过

strcpy()中的异常


你能帮我解决吗?

str2
是一个未初始化的指针<代码>strcpy不分配内存,因此当前正在尝试写入您不拥有的任意地址,并且很可能无法通过代码写入

在调用strcpy之前,您需要将str2指向有效内存

str2 = (char*)malloc(str.size()+1);
strcpy(str2,str.c_str());
您还应该
稍后在程序中释放
内存

free(str2); // cannot dereference str2 after this point

问题是,您通过不初始化str2在未初始化/随机内存位置写入

第一个解决方案:

str2 = new char[str.size() + 1];
strcpy(str2, str.c_str());
...
delete[] str2.
第二(更好的解决方案):不要在代码中使用指针,除非您必须:

std::string str2 = str1;

也可以考虑使用STD:OSTINGING SUTION用于STD::字符串和转换为int?/p>什么例外?你是说赛格弗尔吗?另外,为什么使用C++的C字符串函数?如果你不知道自己在做什么和为什么,那通常是个坏主意。一个问题是,str2是未初始化的指针。除了缺少分配之外,请看您的问题是引发一个未显示异常的异常…谢谢,但它会生成一个错误,从void*到char*@NadiaBarjaste的无效转换我已经用缺少的强制转换更新了我的答案。(我忘记了C++是强制转换的;它不是必需的,在C中是不鼓励的)

std::string str2 = str1;