Относительно set1 и ваших проблем с printf("%s\n",*s[i].id);
.
*s[i].id
эквивалентно *(s[i].id)
, а не (*s[i]).id
, как вы, вероятно, предполагали.Поскольку тип s[i]
равен ak *
, вы не можете получить его поле id через s[i].id
.
Вы можете написать (*s[i]).id
, но более читаемый способ - использовать s[i]->id
.
У вашего printf есть другая проблема, формат не может быть "%s"
, потому что s[i]->id
- это int , а не char *
Относительно set2
Вы делаете printf("%s\n",s[i]);
, и вы удивлены, потому что печатается только строка, как вы можете ожидать, что выведите строку и Инт?
Вы запрашиваете печать строки (формат %s
), но s[i]
не является строкой.По случайному struct начинается с поля str , являющегося строкой, так что да, вы пишете это, но это не правильный путь.
Вы должны явно печатать каждый атрибут, например, делая printf("%s %d\n",s[i]->str, s[i]->id);