gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 04:46:50 24 4
gpt4 key购买 nike

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

文件 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);
}

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

文件2

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 的内容。

最佳答案

像下面这样的东西是你需要的。

包含文件。

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);
}

函数函数

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

关于c - 无法从结构内部的字符数组中检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20004085/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com