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

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

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

задача кода принять из файла имена и если они начинаются на A вывести на экран, написал пока без файла, столкнулся с проблемой, int выводит без проблем, а вот при char - выводит (NULL), где то в функции create() при присвоении косяк, а вот почему
Листинг программы
  1. #define SIZE_NAME 100
  2. typedef struct person
  3. {
  4. char personName[SIZE_NAME];
  5. struct person *next;
  6. }Person;
  7. typedef struct p_person
  8. {
  9. Person *head;
  10. }p_Person;
  11.  
  12. void init(p_Person *pList)
  13. {
  14. pList->head = NULL;
  15. }
  16. Person *create(char* s)
  17. {
  18. Person *tmp = NULL;
  19. tmp = (Person*)malloc(sizeof(Person));
  20. if (tmp)
  21. {
  22. tmp->personName[SIZE_NAME] = s;
  23. tmp->next = NULL;
  24. }
  25. return tmp;
  26. }
  27.  
  28. void addTolist(p_Person *pList, char* s)
  29. {
  30. if (pList->head == NULL )
  31. {
  32. pList->head = create(s);
  33. if (pList->head == NULL)
  34. {
  35. exit(1);
  36. }
  37. }
  38. else
  39. {
  40. Person *tmp = create(s);
  41. if (tmp)
  42. {
  43. tmp->next = pList->head;
  44. pList->head = tmp;
  45. }
  46. }
  47. }
  48. void printPlist(p_Person *pList)
  49. {
  50. Person *tmp = pList->head;
  51. for (tmp; tmp; tmp = tmp->next)
  52. {
  53. printf("%s\n", tmp->personName[SIZE_NAME]);
  54. }
  55. }
  56. void main()
  57. {
  58. char s[SIZE_NAME] = "hfhf";
  59. p_Person pList;
  60. init(&pList);
  61. addTolist(&pList,s);
  62. printPlist(&pList);
  63. }

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

textual
Листинг программы
  1. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы