我在c中使用零左键.Below是实现代码。
unsigned char* LeftPadZero(unsigned char fa[], int flen)
{
unsigned char *fout;
int sz;
sz = snprintf(NULL,0,"%s",fa);
fout = (unsigned char*)malloc(flen+sz+1);
if(flen > 0)
{
sprintf((char*)fout,"%0*d%s", flen , 0, fa);
}
else if(flen == 0)
{
fout = fa;
}
else
{
printf("Length of number is negative\n");
return NULL;
}
return fout;
}
现在我正在尝试对右零垫进行相同的操作。但不是用0填充。长度正在打印。 EX:string000这样它应该打印。在我的情况下,它打印为string3
unsigned char* RightPadZero(unsigned char fa[], int flen)
{
unsigned char *fout;
int sz;
sz = snprintf(NULL,0,"%s",fa);
fout = (unsigned char*)malloc(flen+sz+1);
if(flen > 0)
{
sprintf((char*)fout,"%s%0*d", fa , 0, flen);
}
else if(flen == 0)
{
fout = fa;
}
else
{
printf("Length of number is negative\n");
return NULL;
}
return fout;
}
答案 0 :(得分:1)
在数据参数之前,长度参数必须是,所以试试这个
sprintf((char*)fout,"%s%0*d", fa , flen, 0);
而不是
sprintf((char*)fout,"%s%0*d", fa , 0, flen);
引自N1570 7.21.6.1 fprintf函数,第5段:
如上所述,字段宽度或精度或两者可以用星号表示。在 在这种情况下,int参数提供字段宽度或精度。争论 指定字段宽度或精度,或两者都应出现(按此顺序) 要转换的参数(如果有的话)。