Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C中打印结构中的三个字节_C_Struct_Printf - Fatal编程技术网

如何在C中打印结构中的三个字节

如何在C中打印结构中的三个字节,c,struct,printf,C,Struct,Printf,我有以下C代码: person->title 标题是一个三字节字符数组。我只想打印这三个字节。我不能将字符串格式化程序与printf一起使用,因为没有空字节 我如何打印出来,而不必复制它或添加一个空字节 提前谢谢 更新 结果它不是一个数组,只是三个相邻的字节。如果我尝试使用建议的代码进行编译: 人员->标题[0] 它失败并出现以下错误: test.c:46: error: subscripted value is neither array nor pointer. 您可以使用以下内容

我有以下C代码:

person->title
标题是一个三字节字符数组。我只想打印这三个字节。我不能将字符串格式化程序与printf一起使用,因为没有空字节

我如何打印出来,而不必复制它或添加一个空字节

提前谢谢

更新 结果它不是一个数组,只是三个相邻的字节。如果我尝试使用建议的代码进行编译:

人员->标题[0]

它失败并出现以下错误:

test.c:46: error: subscripted value is neither array nor pointer.

您可以使用以下内容:

printf("%c%c%c", person->title[0], person->title[1], person->title[2]);
for (int i=0; (i<3) && (person->title[i] != 0); i++)
  printf("%c", person->title[i]);
如果您确定这三个字节已填充。如果可能短于三个字节,请尝试以下操作:

printf("%c%c%c", person->title[0], person->title[1], person->title[2]);
for (int i=0; (i<3) && (person->title[i] != 0); i++)
  printf("%c", person->title[i]);
for(inti=0;(ititle[i]!=0);i++)
printf(“%c”,person->title[i]);

您可以使用以下内容:

printf("%c%c%c", person->title[0], person->title[1], person->title[2]);
for (int i=0; (i<3) && (person->title[i] != 0); i++)
  printf("%c", person->title[i]);
如果您确定这三个字节已填充。如果可能短于三个字节,请尝试以下操作:

printf("%c%c%c", person->title[0], person->title[1], person->title[2]);
for (int i=0; (i<3) && (person->title[i] != 0); i++)
  printf("%c", person->title[i]);
for(inti=0;(ititle[i]!=0);i++)
printf(“%c”,person->title[i]);
请尝试此

char *a = &(person->title);
printf("%c %c %c", *a, *(a+1) , *(a+2));
编辑

基于struct中的20个字段,更简单的是,在struct中会进行连续内存分配

例如:

请试试这个

char *a = &(person->title);
printf("%c %c %c", *a, *(a+1) , *(a+2));
编辑

基于struct中的20个字段,更简单的是,在struct中会进行连续内存分配

例如:


对于结构-您可以利用内存将被分配为连续字节这一事实。您还可以使用fwrite()精确控制写入的字节数(如果希望将其打印到终端,请使用“stdout”作为文件指针)

e、 g


对于结构-您可以利用内存将被分配为连续字节这一事实。您还可以使用fwrite()精确控制写入的字节数(如果希望将其打印到终端,请使用“stdout”作为文件指针)

e、 g


完全重复:除了解决方案不起作用,因为printf仍然查找空字节。使用该解决方案(我以前尝试过)会导致strnlen()中出现segfault。我希望我遗漏了一些东西,因为这将是一个非常棒的解决方案…如果您可以扩展数组以说明终止的“\0”字符。这将允许您使用字符串函数,而不是编写自己的数组访问函数。我相信多出一个字符就值得节省开发时间。完全重复:除非解决方案不起作用,因为printf仍然查找空字节。使用该解决方案(我以前尝试过)会导致strnlen()中出现segfault。我希望我遗漏了一些东西,因为这将是一个非常棒的解决方案…如果您可以扩展数组以说明终止的“\0”字符。这将允许您使用字符串函数,而不是编写自己的数组访问函数。我相信多出一个字符就值得节省开发时间。它不是以null结尾的,所以即使它短于3字节,第二个检查也没有用(:我在考虑这样的情况,它可以保存“Mrs”、“Mr.”,有时也可以只保存“M”。)例如,即正常意义上的not null终止,但可能少于3个字符。它不是null终止的,因此即使它少于3个字节,第二个检查也是无用的(:我在考虑这样的情况,它可以包含“Mrs”、“Mr.”或有时仅包含“M”。)例如.i.e.在正常意义上不以null结尾,但总长度可能小于3个字符。@NimalGeo工作得很好-但是结构有大约20个字段,如果我必须为每个字段执行此操作,这将是一个真正的难题…:(尝试复制编辑部分中的代码可以解决此问题,我想你可以将其循环以显示输出:-)在
struct
中,只有数组是连续的。编译器可以在字段之间插入填充符,例如,为了满足对齐可访问性。@NimalGeo工作得很好-但是struct有大约20个字段,如果我必须为每个字段都这样做,那将是一件非常痛苦的事情…:(尝试复制编辑部分中的代码应该可以解决这个问题,我想你可以循环它以显示输出:-)在
结构中,只有数组是连续的。编译器可以在字段之间插入填充,例如满足对齐可访问性。