#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|warning:格式'%u'需要'unsigned int'类型的参数,但参数2的类型为'struct Graph *'[ - Wformat =] |
我应该为类型struct Graph *
使用什么格式说明符?
答案 0 :(得分:4)
C标准仅指定预定义类型的格式说明符。扩展的MACRO用于打印固定宽度的整数,但整个用户定义/聚合类型没有格式说明符。
您没有数组,结构等的格式说明符。您必须采用单个元素/成员并根据其类型进行打印。您需要了解要打印的数据(类型),并使用适当的格式说明符。
在您的情况下,您可以打印V
类型的成员int
。所以你可以做类似
printf("%d", graph->V);
或者,如果你想打印由malloc()
返回并存储到graph
的指针,你可以这样做
printf("%p", (void *)graph);
最后,see this discussion on why not to cast the return value of malloc()
and family in C.
答案 1 :(得分:1)
编译器是正确的,graph
具有unsigned int
以外的其他类型,%u
将打印该类型。您可能需要graph->V
,因为struct
没有其他数字成员。
printf("%u", graph->V);
在您尝试打印V
时,请注意int
有unsigned int
类型。
我应该为类型
struct Graph *
使用什么格式说明符?
对于指针,您需要格式说明符%p
并将其转换为它接受的类型。
printf("%p", (void*)graph);
请参阅online demo。