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