结构内部结构和指针

时间:2014-04-26 16:00:05

标签: c pointers struct

我正在尝试将txt文件加载到内存中,但是不能正确排列 视频 - >客户端[续] .name =名称;

ps:txt客户端就像这样

txt:
1 name1
2 name2
3 name3

,代码是:

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

struct Client
{
    int number;
    char *name;
};

struct Loan
{
    int number;
    Client *client;
};

void check_error(FILE *arquivo)
{
    if(arquivo==NULL)
    {
        printf("Error to open file!");
        exit(0);
    }
}

void load_client(Loan *video)
{
    FILE *arquivo;
    arquivo=fopen("clientes.txt","rt");
    check_error(arquivo);
    int num,cont=0;
    char name[30];
    while(!feof(arquivo))
    {
    fscanf(arquivo,"%d %s " ,&num,&name); 
    video->client[cont].number=num;
    video->client[cont].name=name; //this part give error!!
    cont++;
    }
    for(int i=0;i<20;i++)
    {
        printf("%d %s\n",video->client[i].number, video->client[i].name);
    }
    fclose(arquivo);
}

int main()
{
    Loan *video=(Loan*)malloc(20*sizeof(Loan));
    video->client=(Client*)malloc(20*sizeof(Client));
    video->client->name=(char*)malloc(20*sizeof(char));
    load_client(video);
    return 0;
}
请有人帮助我, ps:抱歉我的英语!

1 个答案:

答案 0 :(得分:0)

main()中,您使用以下行创建了20个客户端:

video->client=(Client*)malloc(20*sizeof(Client));

因此,下一行应为20个客户端名称分配内存。也就是说,以下行应该循环访问每个客户端作为client [i]:

video->client->name=(char*)malloc(20*sizeof(char));