Присвоить строки массиву указателей - 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;
}

Объяснение кода листинга программы

В этом коде:

  1. Объявлен массив из двух указателей на char - p[2].
  2. Дважды вызывается malloc для выделения памяти под две строки по 10 символов.
  3. Дважды вызывается scanf для считывания двух строк по 10 символов в выделенную память.
  4. С помощью for цикла обходят оба указателя на char и с помощью while выводят на экран символы, пока не встретят нулевой символ.
  5. Выделенная память освобождается с помощью free.
  6. Программа возвращает 0, заканчивая свое выполнение.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.2 из 5
Похожие ответы