Присвоить строки массиву указателей - 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, заканчивая свое выполнение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д