首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在c++中将字符串输入到动态分配的字符内存中

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

Stack Overflow用户
提问于 2014-09-13 16:07:46
回答 3查看 1.3K关注 0票数 0

这是正确的还是有更好的方法来做到这一点。

Visual给出了一个错误:“strcpy()是折旧”。

代码语言:javascript
运行
复制
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());

我想要ptr是输入方程的精确大小。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-09-13 16:38:55

假设您想要实现的是在给定一个modifiable的情况下创建一个std::string char缓冲区,那么更好的选择是使用std::vector<char>来创建这样一个缓冲区。

代码语言:javascript
运行
复制
#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::vectorptr创建一个可修改的、以空结尾的C字符串.请注意,没有对malloccalloc等的调用。

票数 1
EN

Stack Overflow用户

发布于 2014-09-13 16:13:26

不推荐strcpy,因为它是缓冲区溢出问题的一个常见来源,通常是用strncpy修复的。尽管如此,首先使用std::string要好得多。

票数 1
EN

Stack Overflow用户

发布于 2014-09-13 16:57:47

如果您希望使用malloc复制字符串,则只需使用strdup即可。

代码语言:javascript
运行
复制
char* ptr = strdup(eqn.c_str());
// ..
free(ptr);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25825076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档