私のプログラムにはいくつかのデータ型が定義されており、そのうちの 1 つが次のようになります。
typedef struct {
char name[MAX_STR];
int value;
DataType dType;
} VarType;
そして、次のように定義した関数を使用して「初期化」したいと思います。
void initVar(VarType *varPtr, char *name, int *val, DataType d)
{
varPtr = (VarType *) calloc(1,sizeof(VarType));
strcpy(varPtr->name, name);
varPtr->dType;
/* we have to store it differently depending on the type, be careful! */
if(d==C_INT_PTR)
varPtr->value = (int)(val);
else if(d==C_INT)
varPtr->value = *val;
/* NOTE THE FOLLOWING LINE */
printf("The variable name prints properly here: %s\n", varPtr->name);
}
最後に、これらの構造体とメソッドをコードの別の場所で使用したいのですが、文字列リテラルを使用して名前を設定した後に名前を確認すると、initVar()
関数内では完全に正常に出力されますが、ぎこちなく出力されます。
/* let's store the variables we're gonna put in the frame */
VarType vars[3];
initVar(&vars[0], "num", &num, C_INT);
/* NOTE THE FOLLOWING LINE */
printf("This one prints like jibberish: %s\n",vars[0].name);
正しい文字列が出力されなくなったのはなぜですか?