没有printf的C-前导零

时间:2016-04-01 19:24:18

标签: c leading-zero

以太网入门工具包(PIC32MX9795F512L)
语言:C
MPLAB IDE 8.92
编译器:XC32 v1.3

您好我想在我的变量中添加前导零。最后我想在数组中使用。 例如:c=10*a+bc=5 05printf。我不能使用任何<div class="content"> <ol> <li class="image-wrapper"> <div class="block"> <img data-image-index="1" src="Images/image1.jpg"> </div> </li> <li class="image-wrapper"> <div class="block"> <img data-image-index="2" src="Images/image2.jpg"> </div> </li> </ol> <button class="prev-btn">Prev</button> <button class="next-btn">Next</button> </div> 函数,或者我错了吗?

2 个答案:

答案 0 :(得分:1)

您可以使用printf()将格式化的数字打印到标准输出:

int c = 5;
fprintf(stdout, "c [%02d]\n", c);

如果您不能使用printf(),则另一个选项是将填充值存储在char *或字符串中。您可以使用sprintf()将格式化的字符串写入char *缓冲区。

例如:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main (int argc, char *argv[]) {
{
    char* c_str = NULL;
    int c_int = 5;
    int c_str_length = 3; /* two bytes for "0", "5", and one byte for the nul terminator */
    c_str = malloc(c_str_length); 
    if (!c_str) {
        fprintf(stderr, "Error: Could not allocate space for string!\n");
        return EXIT_FAILURE;
    }
    int n = sprintf(c_str, "%02d", c_int);
    if (n != c_str_length) { 
        fprintf(stderr, "Error: Something went wrong in writing the formatted string!\n");
        free(c_str);
        return EXIT_FAILURE;
    }
    fprintf(stdout, "c_str: [%s]\n", c_str);
    free(c_str);
    return EXIT_SUCCESS;
}

如果你走这条路,你可以看到你如何在路上做一些错误检查。您需要考虑字符串长度(提示:log10()),或使用静态char []数组代替长度足够长的char *

答案 1 :(得分:0)

如果您也负责处理负值,则可以很容易地添加前导零。你说你想写一个数组,所以我使用了sprintf但是如果你想直接输出,你可以用类似的方式使用printf

char cstr[24];
int c = 10 * a + b;
if (c > 0) {
    sprintf(cstr, "0%d", c);
} else if (c < 0) {
    sprintf(cstr, "-0%d", -c);
} else {
    //sprintf(cstr, "00");                
    sprintf(cstr, "0");                // depending on your needs
}