Ошибка при передаче строки (списки и динамическая память) - C (СИ)

Узнай цену своей работы

Формулировка задачи:

задача кода принять из файла имена и если они начинаются на A вывести на экран, написал пока без файла, столкнулся с проблемой, int выводит без проблем, а вот при char - выводит (NULL), где то в функции create() при присвоении косяк, а вот почему
 #define SIZE_NAME 100
 
typedef struct person
{
    char personName[SIZE_NAME];
    struct person *next;
}Person;
 
typedef struct p_person
{
    Person *head;
}p_Person;

void init(p_Person *pList)
{
    pList->head = NULL;
}
 
Person *create(char* s)
{
    Person *tmp = NULL;
    tmp = (Person*)malloc(sizeof(Person));
    if (tmp)
    {
        tmp->personName[SIZE_NAME] = s;
        tmp->next = NULL;
    }
    return tmp;
}

void addTolist(p_Person *pList, char* s)
{
    if (pList->head == NULL )
    {
        pList->head = create(s);
        if (pList->head == NULL)
        {
            exit(1);
        }
    }
    else
        {
            Person *tmp = create(s);
            if (tmp)
            {
                tmp->next = pList->head;
                pList->head = tmp;
            }
        }
}
 
void printPlist(p_Person *pList)
{
    Person *tmp = pList->head;
    for (tmp; tmp; tmp = tmp->next)
    {
        printf("%s\n", tmp->personName[SIZE_NAME]);
    }
}
 
void main()
{
    char s[SIZE_NAME] = "hfhf";
    p_Person pList;
    init(&pList);
    addTolist(&pList,s);
    printPlist(&pList);
}

Решение задачи: «Ошибка при передаче строки (списки и динамическая память)»

textual
Листинг программы
printf("%s\n", tmp->personName);

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

  1. В данном коде используется функция printf для вывода информации на экран.
  2. Форматирование вывода осуществляется с помощью символа %s, который указывает на то, что нужно вывести строку.
  3. В качестве строки используется переменная tmp->personName.
  4. Значение переменной tmp->personName будет выведено на экран.
  5. Переменная tmp является указателем на структуру, которая содержит информацию о человеке.
  6. personName является полем структуры, которое содержит имя человека.
  7. Значение поля personName будет выведено на экран.
  8. Ошибка возникает при передаче строки, возможно, из-за неправильного использования памяти или нарушения правил работы со строками.
  9. Для решения проблемы необходимо проверить правильность работы с памятью и строками в данном коде.

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


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

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

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