#include<stdio.h>
#include<stdlib.h>
struct Graph
{
int v;
};
int main()
{
struct Graph* graph = (struct Graph*) malloc(sizeof(struct Graph));
graph -> v = 1;
printf("%u", graph);
return 0;
}
但我得到一个关于行中格式的警告:
printf("%u", graph);
警告是:
/home/praveen/Dropbox/algo/c_codes/r_2e/main.c| 14|警告:格式“%u”需要类型为“unsigned int”的参数,但参数2的类型为“struct Graph *”[-Wformat=]|
对于struct Graph *
类型,我应该使用什么格式说明符?
3条答案
按热度按时间gwbalxhn1#
C标准只为预定义类型指定格式说明符。扩展的MACRO用于打印固定宽度的整数,但不存在 whole 用户定义/聚合类型的格式说明符。
你没有一个数组、结构等的格式说明符。你必须把单个元素/成员根据它们的类型打印出来。你需要了解你要打印的数据(类型)是什么,并使用合适的格式说明符。
在本例中,您可以打印
V
成员,它的类型为int
。或者,如果要打印由
malloc()
返回并存储到graph
中的指针,可以执行以下操作最后,see this discussion on why not to cast the return value of
malloc()
and family in C.mhd8tkvw2#
编译器是对的,
graph
有另一个不同于unsigned int
的类型,它将由%u
打印。您可能需要graph->V
,因为struct
没有其他数字成员。另请注意,当您尝试打印
unsigned int
时,您的V
具有int
类型。更新
对于
struct Graph *
类型,我应该使用什么格式说明符?如果是指标,您需要格式规范
%p
,以及转换成它所接受的型别。请参阅online demo。
rjee0c153#
看看你会做什么,我的朋友。似乎你想打印出你已经分配给
int v
的值。您会得到该错误,因为变量
v
具有返回类型int
,您尚未将其包含在您的printf中...因此printf("%u", graph -> v);