Входные строки в массиве указателей
Проблема в том, что я на самом деле не знаю, что делать с массивом указателей, как я это делаю, он передает в адрес массива адрес, и поэтому я всегда получаю в каждой позиции последний ввод. Но если я использую оператор *, он передаст только первый символ.. так как я это сделаю??
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, © );
} //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