C printf/sprintf疯狂(自发连接)
我有一个程序,它采用2x24位整数,通过C printf/sprintf疯狂(自发连接),c,printf,concatenation,C,Printf,Concatenation,我有一个程序,它采用2x24位整数,通过sprintf将它们转换成strings,并将它们组合成一个表示58位数字的字符串。 节目: int buffer_h=0x001FFFFF; int buffer_l=0x002ffff; int i,j=0; charres_h[10]; char res_l[10]; char res_all[12]; sprintf(res_h,“%06X”,buffer_h); sprintf(res_l,“%06X”,buffer_l); 对于(i=0;i您必
sprintf
将它们转换成strings
,并将它们组合成一个表示58位数字的字符串。
节目:
int buffer_h=0x001FFFFF;
int buffer_l=0x002ffff;
int i,j=0;
charres_h[10];
char res_l[10];
char res_all[12];
sprintf(res_h,“%06X”,buffer_h);
sprintf(res_l,“%06X”,buffer_l);
对于(i=0;i您必须以null终止('\0'
)res\u all
printf
只能在以空结尾的字符串上决定性地工作。我猜你很幸运,res\u all
正好位于内存中正好以空结尾的resu l
之前。你也可以很容易地在某个地方被除掉。nullchar termres\u all
中的ator可能会大大提高您的成功几率。这一点,以及缓冲区的适当大小。正如@WhozCraig所说。或者,您可以打印一个字符缓冲区,该缓冲区不以null结尾,只需显式指定一个精度:printf(%.12s),res\u all);
(使字符串以null结尾将允许它与许多标准函数一起使用,因此这是更好的方法。)…你的重点是什么?我可以看到我的答案是如何被这样解释的。我不是想暗示“/0”==null。我只是想说你需要以null终止字符串,而“/0”是你指定null终止符的方式。等等…是的,这就是我的意思…我有斜杠读写困难症。“printf仅在以null结尾的字符串上决定性地工作。”不正确。代码可以使用printf(“%.12s”,res_all);
。如果字符串和缓冲区小于12字节,并且字符串未以null结尾,该怎么办?
int buffer_h = 0x001FFFFF;
int buffer_l = 0x002FFFFF;
int i,j = 0;
char res_h[10];
char res_l[10];
char res_all[12];
sprintf(res_h,"%06X",buffer_h);
sprintf(res_l,"%06X",buffer_l);
for(i=0;i<6;i++) {
res_all[i] = res_h[i];
}
for(i=0;i<6;i++) {
res_all[i+6] = res_l[i];
}
printf("%s",res_all);