如何在c ++中将字符串数组复制到动态数组中

时间:2015-01-02 23:12:05

标签: c++

我只是想在不使用c ++的string.h的情况下将字符串数组复制到动态数组(使用new运算符) 我怎么能复制数组?

enter code here
const int LEN=3;
int n=15;
char*s1 ;
char *s[LEN]={"music","disc","soft"};
char (*str)[LEN]=new char[n][LEN];   //i want to copy s to  this array  

我尝试做这样的事情

for(int i=0; i<LEN ;i++){
     strcpy(str[i],s[i]);
}
for(int i=0; i<LEN ;i++)
      cout<<str[i]<<endl;

但它在一个Sequence中打印所有数组,我认为NULL终止符有问题 我不知道如何处理

3 个答案:

答案 0 :(得分:1)

请看vector

string sArray[3] = {"aaa", "bbb", "ccc"};
vector<string> sVector;
sVector.assign(sArray, sArray+3);

来自here

的来源

答案 1 :(得分:1)

Sane C ++代码将使用vectorarray,以及string。但是,如果没有这些,纯C通常会使用动态字符串的动态数组:

char** strs = new char*[LEN];  //a dynamic array of dynamic strings
//Alternatively, char* (*strs)[LEN]
for(int i=0; i<LEN; ++i) {
    strs[i] = new char[strlen(s[i])];
    strcpy(strs[i], s[i]);
}
//code goes here
for(int i=0; i<LEN; ++i) 
    delete[] strs[i];
delete[] strs;
strs = NULL;

但是,您的代码更接近固定长度字符串的动态数组:

char **strs = new char[n][LEN];  //a dynamic array of dynamic strings
//Alternatively, char(*strs)[LEN][n], or is it char(*strs)[n][LEN]?
for(int i=0; i<LEN; ++i) 
    strcpy(strs[i], s[i]);
//code goes here
delete[] strs;
strs = NULL;

答案 2 :(得分:1)

您反转str的尺寸,请尝试:

const int LEN = 3;
const int n = 15;
const char *s[LEN] = {"music", "disc", "soft"};
char (*str)[n] = new char[LEN][n];

for(int i = 0; i < LEN ; i++) {
    strncpy(str[i], s[i], n);
}
for(int i = 0; i < LEN ; i++)
    std::cout << str[i] << std::endl;

delete []str;

Live example