私は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;
}