无法在结构中指定值

时间:2014-04-19 19:44:28

标签: c pointers structure

我已经宣布了结构:

typedef struct keyValuePairs{
char* type;
char* key;
char* valueType;
char* value;
} keyValueType;

keyValueType keyValuePairs[1000];

在函数中声明局部变量为:

char key[500];
char value[500];

将键值对值保存为:

key[i]="abc";
value[i]="xyz"

我已将这些局部变量分配给全局变量:

keyValuepairs[1].key=key.

一旦我退出该功能,结构中分配的值就会丢失。有人能解释我哪里错了吗? 请注意我是C的新手。

3 个答案:

答案 0 :(得分:1)

变量都是指向函数中堆栈中分配的数组的指针。在 keyValuepairs [1] .key = key 之后,全局变量指向堆栈中的相同位置。退出函数后,将重用这些数组所在的内存。

我建议您阅读C

中的静态与动态分配

答案 1 :(得分:1)

如果我理解正确,你正在尝试以下方面:

typedef struct
{
   char* val;
} A;

A alist[10];

void foo()
{
   char t[10];
   t = "abc";
   alist[0].val = t;
}

int main()
{
   foo();
}

首先,行

t = "abc";

在语法上是不正确的。你必须使用类似的东西:

strcpy(t, "abc");

但最重要的错误是当你从foo返回时,alist[0].val指向一个不再好的地址。要确保alist[0].val指向有效地址,您必须为堆中的内存分配内存,并将t的内容复制到其中。

void foo()
{
   char t[10];
   strcpy(t,"abc");
   alist[0].val = malloc(strlen(t)+1);
   strcpy(alist[0].val, t);
}

要完成一项彻底的工作,您必须确保在从free返回之前的某个时刻在该分配的内存上调用main

答案 2 :(得分:0)

您尚未为类型 valueType 分配内存。 尝试静态内存分配:

typedef struct keyValuePairs{
char* type[n];
char* key[n];
char* valueType[n];
char* value[n];
} 

n 是定义的常量