В Struct fl нет элемента с именем sub

#c

#c

Вопрос:

 #include <stdio.h>
#include <stdlib.h>

struct fl{    
  char sub[3] = {"Math","Science","ICT"};    
};

int main()
{    
    int i;

    struct fl floatp;

    for (i = 0; i < 3;   i){    
        printf (" %s",floatp.sub[i]);    
    }

    return 0;
}
  

Я получаю эту ошибку «в struct fl нет элемента с именем sub» в 11-й строке. Но у меня есть элемент с именем ‘sub’. Что я делаю не так?

Комментарии:

1. char *sub[3] = {"Math","Science","ICT"}; , но этот вид инициализации по-прежнему некорректен.

2. Ваш компилятор не выдал ошибку в строке, упомянутой @wildplasser?

3. Не требуется [3] — использовать [] вместо этого — заставить компилятор выполнить подсчет

4. @wildplasser: Чтобы подробнее остановиться на этом, любая инициализация элемента struct недопустима. Аник, это единственное сообщение об ошибке, которое ты получил? Вы должны были получить ошибку при определении sub . И даже если бы это было разрешено, sub это массив из 3 символов; он не может содержать три строки или указатели на строки.

5. @KeithThompson: Я знаю.

Ответ №1:

Вы хотите это:

 #include <stdio.h>
#include <stdlib.h>

struct fl {
  char *sub[3];
};

int main()
{
  int i;

  struct fl floatp = {{ "Math","Science","ICT" }};
  // or if your compiler supports it:
  // struct fl floatp = {.sub = { "Math","Science","ICT" }};

  for (i = 0; i < 3;   i) {
    printf(" %s", floatp.sub[i]);
  }

  return 0;
}
  

Комментарии:

1. У меня есть один вопрос. Зачем использовать две фигурные скобки в 9-й строке?

2. Внешний для структуры, внутренний для массива.