use*_*115 15 c printf structure
我有兴趣打印结构字段.
Typedef struct
{
UINT32 thread_id;
BOOL is_valid;
}T_THREAD;
Run Code Online (Sandbox Code Playgroud)
是否有一种方法用"C"语言来打印结构的内容,如
ex:print (T_THREAD)和输出应该是这样的
Contents of a structure T_THREAD are
thread_id
is_valid
Run Code Online (Sandbox Code Playgroud)
不,没有实现您想要的标准/预定义方式。
是的,但是,您可以编写自己的函数,该函数具有要打印的特定结构元素值的知识,然后,使用结构变量的特定实例对函数进行一次调用,就可以获取的所有值。所有成员都被打印出来。就像是
T_THREAD var;
my_print(var); //my_print() is the function you'll roll out
Run Code Online (Sandbox Code Playgroud)
应该能够打印这些值。
但是,请注意,这不会允许您打印变量名称的任何方式,只有“值”。
至于您的结构,该函数将如下所示。
// st_name is the name of the struct
void print(T_THREAD *st, const char *st_name)
{
printf("Contents of structure %s are %lu, %d\n", st_name, st->thread_id, st->is_valid);
}
Run Code Online (Sandbox Code Playgroud)
您无法使用一条printf语句打印所有结构元素。在 C 语言中,您必须手动将它们全部打印出来。下面是创建两个结构成员并将它们打印出来的示例:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
typedef struct {
char *name;
int thread_id;
bool is_valid;
}T_THREAD;
int
main(void) {
T_THREAD T1 = {"T1", 123, 1};
T_THREAD T2 = {"T2", 456, 0};
printf("\nContents of a structure %s are:\n", T1.name);
printf("thread_id: %d\n",T1.thread_id);
printf("is_valid: %d\n", T1.is_valid);
printf("\nContents of a structure %s are:\n", T2.name);
printf("thread_id: %d\n",T2.thread_id);
printf("is_valid: %d\n", T2.is_valid);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
Contents of a structure T1 are:
thread_id: 123
is_valid: 1
Contents of a structure T2 are:
thread_id: 456
is_valid: 0
Run Code Online (Sandbox Code Playgroud)
或者,您也可以创建一个函数来执行此操作:
int
main(void) {
T_THREAD T1 = {"T1", 123, 1};
T_THREAD T2 = {"T2", 456, 0};
print_struct_elements(&T1);
print_struct_elements(&T2);
return 0;
}
void
print_struct_elements(T_THREAD *T) {
printf("\nContents of a structure %s are:\n", T->name);
printf("thread_id: %d\n",T->thread_id);
printf("is_valid: %d\n", T->is_valid);
}
Run Code Online (Sandbox Code Playgroud)