2016-04-10 2 views
-3

Я пытаюсь разыменовать этот указатель на новый массив (ARR), но из этого примера ниже, когда я делаю дефрагментацию *issub, он только «переносит» первую букву. Как я могу исправить эту ситуацию и есть ли ARR(subscount) слово, которое я хочу?Ящики указателей на разметку

#include <iostream> 
    int main(){ 
    char inp[3]={'O','I','L'}; 
    int lll=3; 
    char ARR[3]; 
    int subscount=0; 

    char * issub= new char[lll]; 
    for(int i=0;i<lll;i++){ 
    issub[i]=inp[i]; 
    } 
    ARR[subscount]=*issub; 
} 
+0

Ваш код плохо, потому что вх осуществляется доступ с недоступный индекса! – Poriferous

+0

Что именно вы хотите сделать? Заполните каждую ячейку «ARR», чтобы она была одинаковой с 'inp', ** или ** указателем в' ARR [subscount] 'будет указывать на слово? – gsamaras

+0

@gsamaras Я хочу 'ARR [0]' быть «OIL» так же, как inp –

ответ

1

Я чувствую, что вы запутались, так что я сделал пример для вас:

#include <iostream> 

int main() { 
    char inp[4] = {'O','I','L', '\0'}; 
    int lll = 4; 
    // initialize elements of 'ARR' to 0 for safety 
    char ARR[4] = {0}; 
    int subscount = 0; 

    // dynamic allocation, DO NOT forget to de-allocate 
    char* issub = new char[lll]; 
    // copy every element of 'inp' to 'issub' 
    for(int i=0;i<lll;i++) { 
    issub[i]=inp[i]; 
    } 
    // this will copy where '*issub' points to, 
    // that is the 'issub[0]', to 'ARR[subscount]' 
    ARR[subscount] = *issub; 
    std::cout << ARR << "\n"; // prints: O 
    // you can use a for loop as before to copy the contents, 
    // from 'inp', 'issub' to 'ARR' 

    // However, we will do something different here, 
    // so I am de-allocating 'issub' 
    delete [] issub; 

    // We will use an array of pointers, with size 2, 
    // thus it will have two pointers in total. 
    char* ptr_arr[2]; 

    // Assign the first pointer to 'inp' 
    ptr_arr[0] = &(inp[0]); 

    std::cout << ptr_arr[0] << "\n"; // prints OIL 

    // we don't use the second pointer, 
    // set it to NULL 
    ptr_arr[1] = NULL; 
    return 0; 
} 

Надежда, что помогает (но это действительно напоминает мне о C, а не C++, где std::string следует использовать).


Обновлено с нулевой завершаемой строкой; What is a null-terminated string?

Спасибо @ M.M

+0

Я думаю, что я получил его, но не должен 'inp [0]' быть первым персонажем? –

+0

@ J.Barbosa 'inp [0]' - первый символ. Да. –

Смежные вопросы