2015-01-02 6 views
0

Я просто хочу скопировать массив строки в динамический массив (используя новый оператор) без использования string.h из C++ как я могу копировать массив?как скопировать массив строки в динамический массив в C++

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; 

но печать всего массива в одной последовательности, я думаю, что проблема с NULL терминатором я не в настоящее время нет, как бороться с

+2

[ 'зЬгсру()'] (Http: // ан .cppreference.com/ш/с/строки/байт/зЬгсру). И 'new char [n] [LEN];' неверно. –

+0

Отсутствует 'const', неиспользуемая переменная' s1' и устаревший комментарий ... – Jarod42

+1

Не используйте 'char *' в C++, пожалуйста. Это просто больно, и в 99% случаев правильная 'std :: string' - это то, что вы хотите. Кроме того, используйте 'std :: vector' (или, может быть,' std :: array'), даже если это означает, что вы набираете немного больше. –

ответ

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

1

Посмотрите на vector.

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

Источник из here

1

Сане 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;