首页 > 解决方案 > 如何在链表的结构中使用字符串?

问题描述

在我的代码中,我有 2 个名为villa和的结构apartment。他们有 type 的成员char*。当在我的 void 记录中,我从用户那里得到结构的其他部分,比如villa1.price(它是浮点数),它可以工作,但是当涉及到时char*,我无法使用scanf("%s",&villa1.city)读取字符串,所以我使用了另一个名为的字符数组v1来获取信息用户,然后使用villa1.city=a1.将其分配给 villa1.city

这是第一次工作,但我想制作一个链表。我第一次发送villa1.cityinsertFirstVilla将其添加到链表时它可以工作,但是当我添加第二个节点时,villa1.city第一个节点丢失并且每次添加新节点时都会发生这种情况。

当我将第二个节点添加到我的列表中时,我如何从用户那里获取数据,villa1.price或者如果无法以数据保持安全的方式复制它。我发布了我的代码的一部分villa,但代码是相同的apartment

struct villa
{
    float built;
    float garden;
    float price;
    int floors;
    char* city;
    char* ST;
    char* alley;
    char* postal_code;
}villa1;
struct nodev
{
    villa info;
    nodev* next;
}*headv = NULL;
void insertFirstvilla(float built, float garden,float price,int floor, char*city) {
    nodev* link = (nodev*)malloc(sizeof(nodev));

    link->info.built = built;
    link->info.garden = garden;
    link->info.price = price;
    link->info.floors = floor;
    link->info.city = city;
    link->next = headv;
    headv = link;
}
void record()
{
    char a;
    printf("is the building apartment? (y/n):");
    scanf("%c", &a);
    char a1[100];
    char v1[100];
    if (a == 'y')
    {
    /*  printf("enter apartment features:");
        printf("\nenter built area:");
        scanf("%f", &apart.built);
        printf("\nenter basic price:");
        scanf("%f", &apart.price);
        printf("\nenter floors number:");
        scanf("%d", &apart.floor_no);
        printf("\ndoes apartment have elavator(if there is no elavotor enter zero else enter one):");
        scanf("%d", &apart.elevator);
        printf("\nenter city:");
        scanf("%s", &a1);
        apart.city = a1;
        insertFirstapartment(apart.built, apart.price, apart.floor_no, apart.elevator,apart.city);
        writetofilea(apart.built, apart.price, apart.floor_no, apart.elevator, apart.city);*/

    }
    else if (a == 'n')
    {
        printf("enter villa features:");
        printf("\nenter built area:");
        scanf("%f", &villa1.built);
        printf("\nenter garden area:");
        scanf("%f", &villa1.garden);
        printf("\nenter basic price:");
        scanf("%f", &villa1.price);
        printf("\nenter floors number:");
        scanf("%d", &villa1.floors);
        printf("\nenter city:");
        scanf("%s", &v1);
        apart.city = v1;
        insertFirstvilla(villa1.built, villa1.garden, villa1.price, villa1.floors, villa1.city);
        writetofilev(villa1.built, villa1.garden, villa1.price, villa1.floors, villa1.city);
    }
    getchar();
}
int main()
{
    int t = 0;
    while (t<4)
    {
        record();
        t++;
    }
}

标签: cstructlinked-list

解决方案


以阅读城市为例:

char a1[100];
scanf("%99s", a1);  // an array will be passed as an address, so no need for &
apart.city = malloc(strlen(a1)+1);   // ask for memory
strcpy(apart.city, a1);              // copy it

或使用strdup,它为您执行此操作:

char a1[100];
scanf("%99s", a1);  // an array will be passed as an address, so no need for &
apart.city= strdup(a1);              // get memory and copy it

推荐阅读