C语言 如何打印结构体中无符号字符数组的内容?

n3h0vuf2  于 2022-12-03  发布在  其他
关注(0)|答案(3)|浏览(562)

我有一个包含无符号字符数组的结构体,我不知道如何在下面的上下文中打印结构体中数组的内容。
字符数组以空值终止。

typedef data_type
{
  int a;
  unsigned char b;
  unsigned char c[33];
} DATA_TYPE, *DATA;

我创建了一个struct的示例

DATA data;
data = (DATA) malloc(sizeof(DATA_TYPE);

/* some code where I populate its values... */

printf("data->a = %d", data->a);
printf("data->b = %u", data->b);
printf("data->c = NOT SURE HOW TO PRINT THIS PART");
yvfmudvl

yvfmudvl1#

除了@小打小闹好回答:
如果data->c缺少 *null字符 *,则可以使用 precision 将所有数组打印为文本。它将输出限制为(int) sizeof data->c,即数组的大小。请注意,precision是一个int参数,而sizeof返回size_t,因此会出现下面的转换。

printf("%.*s\n", (int) sizeof data->c, data->c);

如果data->c[]中有一个 *null字符 *,则上述代码的作用类似于"%s\n"

ruarlubt

ruarlubt2#

如果它是一个以NUL'\0')结尾的字符串,你可以使用注解(printf("data->c = %s", data->c);)中的建议。如果不是,你可以使用循环来打印整个数组。例如:

printf("data->c = ");
for(i = 0; i < sizeof(data->c); i++)
    printf("%u ", data->c[i]);
printf("\n");
ugmeyewa

ugmeyewa3#

c是否包含以NUL结尾的C字符串?如果是,请使用%s
否则,您需要编写自己的显示函数,以某种方式迭代c数组。
就我个人而言,我会重用我在过去20年中编写的void hexdump(const void *buf, const size_t size)或类似函数的十几个实现中的一个。
一些C标准库还允许将您自己的格式字符挂接到*printf函数中,但这可能不是很容易移植。

相关问题