我正在编写一个 C 程序。我有一个名为的数据结构MyStruct
,它包含一个字符指针和一个整数字段。MyStruct
我有一个被调用的数组myArray
。我需要的是MyStructure
通过函数的结构简单地初始化这个数组initiateParams()
,然后读取 myArray 的值并将它们显示在屏幕上displayParams()
。
该函数只是通过递增整数来initiateParams()
初始化char*
类变量的整数和字段。MyStruct
初始化后,当我想通过displayParams()
整数字段的值检索值时(intigerData
)被正确检索;但指针字段 ( characterSet
) 的值显示不正确;可能是char*
分配给最后一个结构的最后一个值的值。如何正确检索指针值?谢谢你。
#include <stdio.h>
#include <stdlib.h>
//#include"structHeader.h"
#include <stdint.h>
void initiateParams();
void displayParams();
char* itoa(int value, char* result, int base);
typedef struct _MyStruct
{
char* characterSet;
uint16_t intigerData;
uint16_t * intigerDataPtr;
} MyStruct;
const uint16_t bufferSize = 400;
MyStruct myArray[400];
int main ()
{ initiateParams();
displayParams();
printf("ended");
return 0;
}
void initiateParams(){
uint16_t i;
for(i = 0 ; i < 4*bufferSize ; i++){
uint16_t k = i % bufferSize;
MyStruct myStruct;
myStruct.intigerData = i;
char c;
char* c2 = itoa(i , &c , 10);
c = *c2;
myStruct.characterSet = &c;
myStruct.intigerDataPtr = & i;
//printf("%s\r\n" , &dig);
myArray[k] = myStruct;
}
}
void displayParams(){
uint16_t i;
for(i = 0 ; i < bufferSize ; i++){
MyStruct api = myArray[i];
printf("retrieved integer value: %d , character pointer value: %s\r\n"
, api.intigerData , api.characterSet);
printf("%s\r\n" , api.characterSet);
}
}
/**
* C++ version 0.4 char* style "itoa":
* Written by Lukás Chmela
* Released under GPLv3.
*/
char* itoa(int value, char* result, int base) {
// check that the base if valid
if (base < 2 || base > 36) { *result = '\0'; return result; }
char* ptr = result, *ptr1 = result, tmp_char;
int tmp_value;
do {
tmp_value = value;
value /= base;
*ptr++ = "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz"
[35 + (tmp_value - value * base)];
} while ( value );
// Apply negative sign
if (tmp_value < 0) *ptr++ = '-';
*ptr-- = '\0';
while(ptr1 < ptr) {
tmp_char = *ptr;
*ptr--= *ptr1;
*ptr1++ = tmp_char;
}
return result;
}