我花了很长时间试图弄清楚以下程序的问题是什么:
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);
}
该程序非常简化以突出相关部分。发生的情况是第一个打印语句 (//1) 正确输出了值,而第二个 (//2) 则没有 - 它输出的东西看起来像是一个可能的内存位置。
我尝试了多种访问存储变量的组合,但我就是无法破解它。任何帮助,将不胜感激。
Edit1:修复了代码中的几个非必要错误(与指针或结构无关)
最后编辑:谢谢大家的帮助。Arun Saha 指出的问题确实存在于原始代码中,现在已修复。但是,打印两个不同字符串的问题仍然存在。您对代码应该编译和工作的保证让我发现了真正的罪魁祸首——我没有正确初始化其他复杂结构的另一部分,这导致了 user.order 变量的覆盖。