无法从结构内部的字符数组中检索数据

时间:2013-11-15 15:05:19

标签: c

我在一个文件中使用下面的代码

档案1

//structure is global 
struct abc
{
    char var;
    char *a[5];
}*p;
struct abc q;

int main()
{
    char t[] = "sample"
    p = &q;
    p->a[0] = &t[0];
    p->var = 10;
    printf("var = %d, string  = %s\n", p->var, p->a[0]);
    func();
    exit(0);
}

但是如果我尝试访问另一个文件中的a[]中的结构成员(func()),我就不会获得在另一个文件中分配的数据(上图)。

file2的

int fucn()
{
    char var1;
    var1 = p->var;
    printf("var1 = %d\n", var1);
    //since i am unable to copy p->a[0] to some other string i am trying to print the  contents of p->a[0].
    printf("a = %s\n", p->a[0]);
}

程序崩溃执行第二个printf但我可以打印在其他文件中分配的p->var内容。

1 个答案:

答案 0 :(得分:0)

以下是您需要的东西。

包含文件。

prompt> cat foo.h
struct abc {
    char var;
    char *a[5];
};

extern struct abc *p;

主要功能

prompt> cat main.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#include "foo.h"  

struct abc q, *p;
extern int func();

int               
main()
{     
    p = &q; 

    /*
     * Using strcpy after allocating memory.
     */

    p->a[0] = malloc(strlen("zero") + 1);
    strcpy(p->a[0], "zero");

    /*
     * strdup is equivalent to malloc and strcpy
     */

    p->a[1] = strdup("one");

    p->a[2] = "two";
    p->a[3] = "three";
    p->a[4] = "four"
    p->var = 10;

    printf("main var = %d, string = %s %s %s %s %s\n", 
        p->var, p->a[0], p->a[1], p->a[2], p->a[3], p->a[4]);
    func();

    return(0);
}             

func功能

prompt> cat func.c
#include <stdio.h>
#include "foo.h"  

int             
func()
{     
    int r;

    r = printf("func var = %d, string = %s %s %s %s %s\n", 
        p->var, p->a[0], p->a[1], p->a[2], p->a[3], p->a[4]);

    return(r);
}

编译并运行

prompt> gcc mainc.c func.c
prompt> a.out
main var = 10, string = zero one two three four
func var = 10, string = zero one two three four