我已經花了年齡試圖弄清楚什麼是與以下程序問題:嵌套結構和指針用C
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變量的覆蓋。
什麼是'datname'主? – Arun 2013-04-07 00:16:21
更不用說'init_user()'。 – chris 2013-04-07 00:18:11
感謝您試圖簡化您的代碼來說明您的問題。當你這樣做的時候,編譯代碼以確保你不會引入額外的錯誤是非常重要的。請編譯並清理所有編譯器錯誤,以便我們幫助您解決實際問題。 – 2013-04-07 00:24:11