动态分配字符串

时间:2014-03-15 14:50:03

标签: c++ string pointers malloc

我已经定义了一个存储字符串长度和内容的结构。

struct sir {
    int length;
    char* string;
};

我正在尝试使用以下命令为此字符串动态分配内存空间:

s->string = malloc(sizeof(char) * (s->length));

但我一直收到这个错误:

error C2440: '=' : cannot convert from 'void *' to 'char *' 

您可以指导完成此功能吗?

PS:我真的想知道在这个新创建的字符串中如何从键盘写入值?     Tnx提前!

2 个答案:

答案 0 :(得分:2)

malloc()将返回void *,需要在char *中明确转换为C++C中不需要)。

尝试

s->string = (char *) malloc(sizeof(char) * (s->length));

修改当您使用C++时,正如@chris所评论的那样,您应该考虑使用std::string。无需手动内存管理。如果您必须自己动手,请使用new代替malloc

答案 1 :(得分:1)

您正在将程序编译为C ++程序。函数malloc的返回类型是void *但是,指向void的指针可能不会被隐式转换为指向C ++中其他类型的指针,并且错误消息说明了这一点。

所以写

s->string = ( char * )malloc(sizeof(char) * (s->length));. 

然而,coorect方式是在C ++中使用operator new而不是malloc

s->string = new char[s->length];. 

再次,如果它是一个C ++程序,那么使用具有显式定义的构造函数,析构函数和复制bassignment运算符的类将更好,而不是结构。

如果您确实想要处理C程序,请将程序编译为C程序。