首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C-不带printf的前导零

C-不带printf的前导零
EN

Stack Overflow用户
提问于 2016-04-02 03:24:18
回答 2查看 844关注 0票数 0

以太网入门套件(PIC32MX9795F512L)

语言:C

MPLAB IDE 8.92

编译器: XC32 v1.3

你好,我想给我的变量加上前导零。最后,我想在数组中使用。例如:c=10*a+b。当为c=5时,它应为05。我不能使用任何printf函数,还是我错了?

EN

回答 2

Stack Overflow用户

发布于 2016-04-02 03:46:07

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

代码语言:javascript
复制
int c = 5;
fprintf(stdout, "c [%02d]\n", c);

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

例如:

代码语言:javascript
复制
#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
EN

Stack Overflow用户

发布于 2016-04-02 03:49:00

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

代码语言:javascript
复制
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
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36364333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档