2014-12-02 78 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是指针的格式说明符。