2014-12-02 75 views
-3

在c編程語言中,我得到編譯錯誤在這個函數中,有人可以告訴我什麼是錯的?我得到這個編譯後:編譯錯誤與函數void

tak.c:在函數 'ispis':tak.c:30:2:警告:格式 '%d' 需要類型 '詮釋' 參數,但參數有4類型 '詮釋*'[-Wformat]

這裏是代碼:

#include <stdio.h> 
struct takmicar { 
    char ime[20]; 
    char prez[20]; 
    int god; 
    char drz[4]; 
}; 

void ispis (struct takmicar niz[50], int n) { 
int i; 
for (i=0; i<n; i++) { 
    printf ("%s %s %d %s \n", niz[i].ime, niz[i].prez, &niz[i].god, niz[i].drz); 
} 
} 
+1

只要將'&niz [i] .god'換成'niz [i] .god'。如果你想輸出指針地址,那麼將'%d'改爲'%p'。 – 2014-12-02 15:51:10

回答

3

那是因爲你要打印一個整數,但是你使用。

&niz[i].god 

作爲一個參數,而不是。

niz[i].god 

在C中,&運營商返回一個變量,它應該通過指針來處理的地址,所以如果你想niz[i].god變化%d的地址打印到%p

3

由於printf格式化字符串中存在不匹配,因此編譯器非常有用,並且相應的值會在運行時爲您提供未定義行爲

如果你想顯示值,然後寫niz[i].god(即丟棄運營商的地址&)。

如果要顯示指針的值,則寫入printf ("%s %s %p %s \n", ...)%p是指針的格式說明符。