我只是想在不使用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终止符有问题 我不知道如何处理
答案 0 :(得分:1)
请看vector。
string sArray[3] = {"aaa", "bbb", "ccc"};
vector<string> sVector;
sVector.assign(sArray, sArray+3);
来自here
的来源答案 1 :(得分:1)
Sane C ++代码将使用vector
或array
,以及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;