需要注意以下知识点:
1. 动态数组要记得 delete [] ,别忘了.
2.strcpy在拷贝的时候,已经包括最后面的 \0 了.
相当于 strncpy,不拷贝最后的 \0,然后在最后再补一个 \0
3.string::c_str() 返回的时一个 const char *,是C风格字符串的地址.
#include<iostream>
#include<string>
#include<vector>
using std::string;
using std::vector;
using std::cin;
using std::cout;
using std::endl;
int main()
{
string strTemp;
vector<string> vecStr;
// catch input string ,save them to vector
while(cin>>strTemp)
{
vecStr.push_back(strTemp);
}
// save vector to string[] pArr
const int arr_size = vecStr.size();
string *pArr = new string[arr_size];
size_t i=0;
for(vector<string>::iterator it = vecStr.begin();it!=vecStr.end();++it)
{
pArr[i] = *it;
i++;
}
delete [] pArr; // don't forget !
// create array of char
pArr = new string[arr_size]; // relocate memeory
i = 0;
for(vector<string>::iterator it = vecStr.begin();it!=vecStr.end();++it)
{
char *p = new char[(*it).size()+1];
strcpy(p,(*it).c_str());
pArr[i] = p;
i++;
}
// output
for(i=0;i<arr_size;i++)
{
cout << pArr[i] << endl;
}
delete [] pArr; // don't forget !
return 0;
}