Входные строки в массиве указателей

Проблема в том, что я на самом деле не знаю, что делать с массивом указателей, как я это делаю, он передает в адрес массива адрес, и поэтому я всегда получаю в каждой позиции последний ввод. Но если я использую оператор *, он передаст только первый символ.. так как я это сделаю??

int main( void ) {

    void prompt_str( const char *str[], char *const copy ); //prototype

    const char *str[ 20 ]= { '\0' };
    const char *copy= 0;

    //prompt stringa
    prompt_str( str, &copy );

} //end main

void prompt_str( const char *str[], char *const copy ) { //definition

    size_t n_str= 0, i= 0;

    do {
        printf( "Insert a string\n:" );
        fgets( copy, 100, stdin );
        i= ( strlen( copy )- 1 ); //get length
        copy[ i ]= '\0'; //remove \n

        str[ n_str++ ]= copy; //put string into pointer of array

    } while ( n_str< 3 );

} 

1 ответ

Вы, кажется, неправильно поняли концепцию указателя.

Когда вы делаете

const char *copy= 0;

вы только получаете pointer, У вас нет памяти для хранения строки.

Ты можешь сделать

char copy[100];

вместо. Это даст вам память для хранения строки (менее 100 символов). Далее вы можете использовать copy как-будто это указатель при вызове функции.

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

char* copy = malloc(100 * sizeof(char));  // Allocate memory

// ... code

free(copy);  // Release memory
Другие вопросы по тегам