Ошибка при передаче строки (списки и динамическая память) - 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);
Объяснение кода листинга программы
- В данном коде используется функция printf для вывода информации на экран.
- Форматирование вывода осуществляется с помощью символа %s, который указывает на то, что нужно вывести строку.
- В качестве строки используется переменная tmp->personName.
- Значение переменной tmp->personName будет выведено на экран.
- Переменная tmp является указателем на структуру, которая содержит информацию о человеке.
- personName является полем структуры, которое содержит имя человека.
- Значение поля personName будет выведено на экран.
- Ошибка возникает при передаче строки, возможно, из-за неправильного использования памяти или нарушения правил работы со строками.
- Для решения проблемы необходимо проверить правильность работы с памятью и строками в данном коде.