C - 访问stuct数组

kev*_*iss 0 c arrays struct pointers

我有一个基本的问题,我不能为我的生活弄清楚.新来的C所以请耐心等待.

首先,我创建一个结构数组:

struct rule {
    int  *in;       /* ingress flag */
    int  *out;      /* egress flag */
    char *actionvalue;  /* actionvalue BLOCK or UNBLOCK */  
    char *proto;        /* protocol e.g. UDP TCP ICMP */    
    char *ip_src;       /* source and dest address */
    int  *srcport;      /* src port */
    char *net_src;      /* source and dest netmask */   
    char *ip_dst;       /* source and dest address */   
    int  *dstport;      /* dst port */
    char *net_dst;      /* source and dest netmask */   
} rulelist[10];
Run Code Online (Sandbox Code Playgroud)

然后我为它们分配值

rulelist[policy_count].in = strsep(&temp, delims);
rulelist[policy_count].out = strsep(&temp, delims); etc...
Run Code Online (Sandbox Code Playgroud)

然后我可以毫无问题地访问它们

printk("%s", rulelist[policy_count].in);

但是当我去访问数组时,数组稍后会在另一个函数的代码中.

printk("%s", rulelist[policy_count].in);

会崩溃,就像它取消呈现一个空指针一样.

我已经阅读了很多关于初始化而不是分配的内容,但是每个例子都是不同的,我似乎无法很好地掌握它.

我也不明白我怎么能立即访问它然后不能在一个不同的功能.结构是全局声明的,所以我不相信它的范围问题.

谢谢

cni*_*tar 5

该函数strsep返回一个指针temp.一旦temp变为无效(例如,当其范围结束时)rulelist[policy_count].in将指向无效的内存.

所以你应该malloc有一些内存并复制数据.但是既然你正在使用strsep那里你很有可能strdup:

char *p = strsep(&temp, delims);
rulelist[policy_count].in = strdup(p);
Run Code Online (Sandbox Code Playgroud)