2016-08-17 8 views
1

私は左のパッドをcで使用しています。下は実装コードです。右側のパッドの文字列に0が入ります

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:それは私の場合をprint.Inすべきstring000この方法は、それは長さ引数が前にデータ引数でなければなりません

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

はstring3として印刷するので、この

sprintf((char*)fout,"%s%0*d", fa , flen, 0); 

を試みる代わりに

されます N1570 7.21.6.1 fprintf関数から
sprintf((char*)fout,"%s%0*d", fa , 0, flen); 

引用、段落5:

上記のように、フィールドの幅、または精度、またはその両方は、アスタリスクで示すことができます。 この場合、int引数はフィールドの幅または精度を指定します。フィールド幅または精度、またはその両方を指定する引数 は、変換する 引数(存在する場合)の前に(その順序で)表示されます。

+0

ありがとうございました。 –

関連する問題