在c ++中将字符串输入到动态分配的char内存中

时间:2014-09-13 16:07:47

标签: c++ string dynamic char

这是正确的还是有更好的方法来做到这一点 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成为输入方程的确切大小。

3 个答案:

答案 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字符串。请注意,我们无法调用ptrmalloc

答案 2 :(得分:1)

如果您希望获得malloc字符串的副本,则只需使用strdup

char* ptr = strdup(eqn.c_str());
// ..
free(ptr);