如何初始化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_];