这是正确的还是有更好的方法来做到这一点 Visual Studio提供错误说' strcpy()已弃用'。
using namespace std;
char* ptr;
ptr=(char *)calloc(1,sizeof(char));
cout << "Input the equation." << endl;
string eqn;
getline(cin, eqn);
ptr = (char *)realloc(ptr, top + eqn.size()+1);
strcpy(ptr, eqn.c_str());
P.S。我想让ptr成为输入方程的确切大小。
答案 0 :(得分:1)
strcpy
,因为它是缓冲区溢出问题的常见来源,通常用strncpy
修复。话虽如此,您首先使用std::string
会更好 。
答案 1 :(得分:1)
假设您尝试实现的是在给定modifiable
的情况下创建std::string
字符缓冲区,更好的选择是使用std::vector<char>
来创建这样的缓冲区。
#include <vector>
#include <string>
#include <iostream>
//...
void foo(char *x)
{
// do something to 'x'
}
using namespace std;
int main()
{
cout << "Input the equation." << endl;
string eqn;
getline(cin, eqn);
// construct vector with string
std::vector<char> ptr(eqn.begin(), eqn.end());
// add null terminator
ptr.push_back(0);
foo( &ptr[0] );
}
上面使用名为std::vector
的{{1}}创建了一个可修改的,以null结尾的C字符串。请注意,我们无法调用ptr
,malloc
等
答案 2 :(得分:1)
如果您希望获得malloc
字符串的副本,则只需使用strdup
:
char* ptr = strdup(eqn.c_str());
// ..
free(ptr);