C указатель связанного списка на структуру внутри указателя на другую структуру

#c

#c

Вопрос:

Как я могу инициализировать объект person с помощью строки, прочитанной из std::cin ?

Класс ListElement представляет связанный список.

 #include <iostream>

using namespace std;

struct Stuff {
      char* name;
      char* surname;
      Date birthday; // Also a struct Date
};

struct ListElement {
      struct Stuff* person;          // Pointer to struct Stuff 
      struct ListElement* next;      // Pointer to the next Element
};

int main() {
      char input_name[50];
      cin >> input_name >> endl;

      ListElement* const start = new ListElement();
      ListElement* actual = start;

      start->next = NULL;
      *actual->person->name = input_name;  // not working :(
}
  

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

1. О, ваш код протекает. C — это не Java.

2. Подумайте дважды, что *actual бы сделать с. actual Он разыменовывает указатель и, следовательно *actual->person , синтаксически неверен. Хотя, как упоминали другие, даже если вы скомпилируете свою программу, в ней будет много ошибок и недостатков.

Ответ №1:

Для этих определений структуры main должен выглядеть следующим образом

 #include <cstring>

//...

int main() {
      char input_name[50];
      cin >> input_name >> endl;

      ListElement* const start = new ListElement();
      ListElement* actual = start;

      actual->person = new Stuff();
      actual->person->name = new char[std::strlen( input_name )   1];
      std::strcpy( actual->person->name, input_name );
      // other code including deleting of all allocated memory
}
  

Ответ №2:

Попробуйте что-то подобное:

 #include <iostream>
#include <list>
#include <string>

using namespace std;

struct Stuff
{
    string name;
};

int main() {
    list<Stuff> res;

    string in;
    cin>>in;

    res.push_back(Stuff{.name=in});

    for(Stuffamp; p : res)
        cout<<p.name<<endl;
    return 0;
}
  

Сборник:

 g   test.cpp -std=c  0 -o test
  

без c containeurs:

 #include <iostream>
#include <string>
#include <string.h>


using namespace std;

struct Stuff {
    char* name;
    char* surname;
    Date birthday; // Also a struct Date
};

struct ListElement {
    struct Stuff* person;          // Pointer to struct Stuff 
    struct ListElement* next;      // Pointer to the next Element
};

int main() {

    ListElement l;

    string in;
    cin>>in;

    char* name = new char[in.size() 1];// 1 for 
    ::strcpy(name,in.c_str());

    Stuff* tmp = new Stuff{
        .name=name,
        .surname = nullptr,
        //.birthday = date
        };

    l.person = tmp;
    l.next = nullptr;

    //do not forget to free Stuff.name
    return 0;
}
  

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

1. Можете ли вы уточнить, каким образом этот код относится к вопросу?

2. Это то же самое, но с контейнерами c .

3. Ерунда, это не «то же самое с контейнерами» . По крайней мере, тогда вы пропустили Stuff структуру.

4. Хорошо, теперь это то же самое, но с неполной структурой. Только минимальный.

5. мне не разрешено изменять структуры… они предопределены