Присвоить строки массиву указателей - C (СИ)
Формулировка задачи:
Здравствуйте! Наверное вопрос глупый, но я оправдаюсь тем, что я новичек.
Так вот:
Есть массив указателей char *arr[5];
Из книжки по си я прочитал следующее: "Инициализация должна задаваться явно —
либо статически, либо в программе.".
То есть статистически - это char *arr[] = {"строка1", "строка2", "строка 4", "и т.д."};
Но я хочу присвоить в программе - то есть, мне нужно написать scanf("%s", &arr[0]), но это не канает.
Помогите разобраться, спасибо!
Решение задачи: «Присвоить строки массиву указателей»
textual
Листинг программы
int main(void)
{
int i;
char *p[2];
p[0] = (char*)malloc(sizeof(char)*10);
p[1] = (char*)malloc(sizeof(char)*10);
scanf("%s", p[0]);
scanf("%s", p[1]);
for (i = 0; i < 2; i++)
{
char* tmp = p[i];
while (*tmp != '\0')
printf("%c", *(tmp++));
}
free(p[0]);
free(p[1]);
return 0;
}
Объяснение кода листинга программы
В этом коде:
- Объявлен массив из двух указателей на char -
p[2]. - Дважды вызывается
mallocдля выделения памяти под две строки по 10 символов. - Дважды вызывается
scanfдля считывания двух строк по 10 символов в выделенную память. - С помощью
forцикла обходят оба указателя на char и с помощьюwhileвыводят на экран символы, пока не встретят нулевой символ. - Выделенная память освобождается с помощью
free. - Программа возвращает 0, заканчивая свое выполнение.