我已经定义了一个存储字符串长度和内容的结构。
struct sir {
int length;
char* string;
};
我正在尝试使用以下命令为此字符串动态分配内存空间:
s->string = malloc(sizeof(char) * (s->length));
但我一直收到这个错误:
error C2440: '=' : cannot convert from 'void *' to 'char *'
您可以指导完成此功能吗?
PS:我真的想知道在这个新创建的字符串中如何从键盘写入值? Tnx提前!
答案 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程序。