2016-08-17 27 views
1

我在c.Below中使用零左墊是實現代碼。在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; 

} 

現在我正在嘗試爲Right零點pad.But而不是填充與0填充長度正在打印。 EX:string000這種方式應該print.In我的情況下,它被打印成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

長度參數必須是之前的數據參數,所以試試這個

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參數提供字段寬度或精度。參數 指定字段寬度或精度,或兩者都應在 參數(如果有)被轉換之前出現(按該順序)。

+0

非常感謝你,現在就開始工作。 –