如何解决如何初始化c字符串数组无stl
| 我想在MSVC2010中使用零指针初始化C字符串数组// Foo.h
#pragma once
class Foo {
int sz_;
char **arr_;
public:
Foo();
~Foo();
// ... some other functions
};
// Foo.cpp
#include \"Foo.h\"
#define INITIAL_SZ 20
Foo::Foo() : sz_(INITIAL_SZ) {
// there I have to initialize arr_ (dynamic array and can be enlarged later)
arr_ = (char **)calloc(INITIAL_SZ * sizeof (char *)); // ???
// or maybe arr_ = new ...
}
如何正确初始化arr_
?我不允许使用STL,MFC等。
解决方法
arr = new char*[INITIAL_SZ]();
可以-您甚至可以将其放在初始化列表中。
,如果您确实要避免使用STL等,那么为什么不这样做:
arr_ = new char*[INITIAL_SZ]();
您甚至可以将其放在初始化程序列表中。
记住在析构函数中调用delete [] arr_
。 (正如@Nawaz在下面指出的那样,您可能还应该遵循三规则,并定义合适的复制构造函数和赋值运算符。)
,1.建立一个适当的字符串类
2.建立一个适当的数组类
3.在字符串上使用数组
快乐地追逐内存泄漏,双重释放和内存损坏。
,arr_ = (char **)calloc(INITIAL_SZ * sizeof (char *));
应该
arr_ = (char **)calloc(INITIAL_SZ,sizeof (char *));
,正确的方法是将arr_
重新定义为std::vector<std::string>
,并使用vector::reserve()
暗示您期望的字符串数。让C ++为您处理内存。
但是,如果必须使用原始C字符串,则可能需要:
arr_ = new char *[sz_];
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。