• Как передавать строки в поле структуры Си?

    CityCat4
    @CityCat4 Куратор тега C
    //COPY01 EXEC PGM=IEBGENER
    Гуглим односвязный список.

    Кстати, зачем списку связность? Для поиска? Тогда лучше двусвязный, вперед и назад, правда заполнение становится сложнее.
    И память брать не только для структуры, но и для поля данных. И чистить сразу, чтобы не вляпаться.
    #define MAXLEN 1024 // Задаемся максимальной длиной строки
    struct Node *head;
    
    if ((head = calloc(sizeof(struct Node) + MAXLEN,1)) == NULL)
      puts("Cannot alloc memory");
    
    head->str = head + sizeof(struct Node); // тут данные
    strncpy(head->str¸ name, strlen(name));

    Почему нельзя просто переадресовать name? Если оно из кучи, оно запросто будет переписано, лучше хранить отдельно. Тупо но надежно.

    UPD: Немного поправил код - переставил неверно поставленную скобку в calloc()
    Ответ написан
    3 комментария
  • Как передавать строки в поле структуры Си?

    zagayevskiy
    @zagayevskiy
    Android developer at Yandex
    char name[10]; выделяется на стеке. После выхода из зоны видимости указатель становится невалидным, поэтому нельзя его писать в поле структуры, чтобы дальше где-то использовать. Можно выделить память также с помощью malloc, это будет нормально. Не забудь её очистить, когда структуру будешь очищать.
    Ответ написан
    Комментировать
  • Как происходит передача списка в функцию через параметр?

    @towin
    У вас все правильно кроме того что не нужно вызывать
    delete tmp;
    в функции AddNode(). Так вы удаляете предпоследний элемент списка, а это не нужно делать.
    Из AddNode возвращать ничего не нужно, вы передаете ей в параметрах указатель, и структуру, на который он указывает, модифицируете.
    Ответ написан
    3 комментария