右边的填充字符串,c为0

时间:2016-08-17 06:31:12

标签: c

我在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;

}

1 个答案:

答案 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参数提供字段宽度或精度。争论   指定字段宽度或精度,或两者都应出现(按此顺序)   要转换的参数(如果有的话)。