正确检索C结构中的指针字段

时间:2013-01-26 16:18:25

标签: c arrays pointers struct

我正在写一个C程序。我有一个名为MyStruct的数据结构,它包含一个字符指针和一个整数字段。我有一个名为MyStruct的{​​{1}}数组。我需要的是简单地通过myArray函数按MyStructure结构初始化此数组,然后读取myArray的值并在initiateParams()屏幕上显示它们。

displayParams()函数只是通过递增整数来初始化类initiateParams()的变量的整数和char*字段。初始化后,当我想通过MyStruct检索值时,整数字段(displayParams())的值被正确地检索;但指针字段(intigerData)的值显示不正确;也许是分配给最后一个结构的最后characterSet值的值。如何正确检索指针值?谢谢。

char*

2 个答案:

答案 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指针。

或者更轻松地将characterSetpointer to char转换为简单char并按值初始化。