如何在C中打印结构中的三个字节
我有以下C代码:如何在C中打印结构中的三个字节,c,struct,printf,C,Struct,Printf,我有以下C代码: person->title 标题是一个三字节字符数组。我只想打印这三个字节。我不能将字符串格式化程序与printf一起使用,因为没有空字节 我如何打印出来,而不必复制它或添加一个空字节 提前谢谢 更新 结果它不是一个数组,只是三个相邻的字节。如果我尝试使用建议的代码进行编译: 人员->标题[0] 它失败并出现以下错误: test.c:46: error: subscripted value is neither array nor pointer. 您可以使用以下内容
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个字段,如果我必须为每个字段都这样做,那将是一件非常痛苦的事情…:(尝试复制编辑部分中的代码应该可以解决这个问题,我想你可以循环它以显示输出:-)在结构中,只有数组是连续的。编译器可以在字段之间插入填充,例如满足对齐可访问性。