如何使结构指向不同的字符串?

时间:2016-03-05 06:57:51

标签: c pointers struct linked-list

我有一个结构,并且结构我有一个字符指针但是我正在创建这个结构的不同实例但是当我在一个结构中更改指针时另一个结构也在改变。

#include <stdio.h>
#include <stdlib.h>

typedef struct human{
    int age;
    char name[100];
} Human;

int main(){
    FILE *s = fopen("h.txt","r");
    if(s==NULL){
        printf("file not available");
    }

    for(int i=0 ;i<5;i++){
        Human h;

        fscanf(s,"%d",&h.age);
        fscanf(s,"%s",h.name);

        insertintolinkedlist(h);
        // this method is going to insert the human into the linked list
    }

    return 0; 
}
发生了什么事情,链表中的所有人都有不同的年龄但同名!

1 个答案:

答案 0 :(得分:1)

您需要分配内存来保存名称。

char* name只是一个指针 - 它没有用于保存名称的内存。

您将其更改为

char name[100];

请记住检查您放入Human.name的名称是否不超过100个字符。

要使用链接列表,您可以执行以下操作:

typedef struct human{
    int age;
    char name[100];
    struct human* next;
} Human;

int main()
{
    Human* head = NULL;
    Human* tail = NULL;

    for(.....)
    {
        Human* h = malloc(sizeof(Human));
        if (head == NULL) head = h;
        if (tail != NULL)
        {
            tail->next = h;
        }
        tail = h;
        h->next = NULL;
        h->age = ....;
        strncpy(h->age, "..name..", 100);
    }

    // ..... other code

    // Remember to free all allocated memory
}