私は、次のプログラムの問題点を突き止めるために何年も費やしてきました。
typedef struct user {
char host[40];
int order;
} user;
typedef struct data {
user userdat;
} data;
int read_user (char *datname, user *userdat) {
...
fscanf (datin, "%s", &userdat->host);
fscanf (datin, "%d", &userdat->order);
//1
printf ("%d\n", userdat->order);
...
}
void init_data (data *dat) {
init_userdat (&dat->userdat);
}
void init_userdat (user *userdat) {
*userdat->host = "127.0.0.1";
userdat->order = 0;
}
int user_print (int i, data *dat) {
//2
printf ("%d\n", dat->userdat.order);
}
int main(int argc, char *argv[]) {
...
data dat;
init_data (&dat);
read_user (datname, &dat->userdat);
user_print (&dat);
}
プログラムは、関連するセクションを強調するために非常に単純化されています。何が起こるかというと、最初の print ステートメント (//1) は値を正しく出力しますが、2 番目 (//2) はそうではなく、可能なメモリ位置のように見えるものを出力します。
保存された変数にアクセスするためのさまざまな組み合わせを試しましたが、クラックできません。どんな助けでも大歓迎です。
Edit1: コード内のいくつかの重要でないエラーを修正しました (ポインターまたは構造体に関連していません)。
最終編集: ご協力いただきありがとうございます。Arun Saha が指摘した問題は確かに元のコードにあり、現在は修正されています。ただし、2 つの異なる文字列を出力する問題は解決しませんでした。それ以外の場合はコードがコンパイルされて機能するというあなたの保証により、真の犯人を発見することができました.複雑な構造体の別の部分を適切に初期化していなかったため、user.order変数が上書きされました.