#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: format ‘%u’ expects argument of type ‘unsigned int’, but argument 2 has type ‘struct Graph *’ [-Wformat=]|
我应该对 struct Graph *
类型使用什么格式说明符?
最佳答案
C 标准仅指定预定义类型的格式说明符。扩展的宏用于打印固定宽度的整数,但不存在整个用户定义/聚合类型的格式说明符。
您没有数组、结构等的格式说明符。您必须获取单个元素/成员并根据其类型打印它们。您需要了解要打印的数据(类型)是什么,并使用适当的格式说明符。
就您而言,您可以打印成员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.
关于c - 指向结构体的指针的格式说明符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46047851/