我正在写一个C程序。我有一个名为MyStruct
的数据结构,它包含一个字符指针和一个整数字段。我有一个名为MyStruct
的{{1}}数组。我需要的是简单地通过myArray
函数按MyStructure
结构初始化此数组,然后读取myArray的值并在initiateParams()
屏幕上显示它们。
displayParams()
函数只是通过递增整数来初始化类initiateParams()
的变量的整数和char*
字段。初始化后,当我想通过MyStruct
检索值时,整数字段(displayParams()
)的值被正确地检索;但指针字段(intigerData
)的值显示不正确;也许是分配给最后一个结构的最后characterSet
值的值。如何正确检索指针值?谢谢。
char*
答案 0 :(得分:2)
这一行
myStruct.characterSet = &c;
仅存储指向堆栈上分配的临时变量“c”的指针。
你至少应该在characterSet字段中存储'c2'变量(不带'*')的值。
你也没有分配缓冲区,传递给itoa是错误的。
您应该(对于每个字符)分配缓冲区:
char* buf = malloc(10);
myStruct.characterSet = itoa(i , buf , 10);
并在完成后取消分配结构(在displayParams之后)。
代码应为
void initiateParams(){
uint16_t i;
for(i = 0 ; i < 4*bufferSize ; i++){
uint16_t k = i % bufferSize;
MyStruct myStruct;
myStruct.intigerData = i;
char* buf = malloc(10);
myStruct.characterSet = itoa(i , buf , 10);
myStruct.intigerDataPtr = & i;
myArray[k] = myStruct;
}
}
答案 1 :(得分:1)
characterData
打印失败,因为它指向仅存在于c
范围内的地址(变量initiateParams()
)
我认为您需要创建malloc
,将值分配给新分配的字节,并将后者的地址分配给characterSet
指针。
或者更轻松地将characterSet
从pointer to char
转换为简单char
并按值初始化。