我已经宣布了结构:
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的新手。
答案 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 是定义的常量