使用 printf 和不使用 printf 实现 itoa 函数的问题

克里斯蒂安·蒙特罗

我只是为我自己的 itoa(仅用于正数)编写了一个代码,并尝试使其尽可能高效,我从函数内部和 main 中显示值,并且它可以工作,但是当我从内部删除 printf 行时代码不再起作用的功能,有人知道为什么吗?

这是它工作的地方

在此处输入图片说明

这是它不起作用的地方

在此处输入图片说明

感谢您的时间!祝你今天过得愉快

编码:

#include<stdio.h>
#define uint8_t unsigned char
#define uint16_t unsigned int

/*Prototipos de funciones*/
uint8_t *UART0_itoa(uint16_t number, uint8_t base);

/*Función principal*/
void main(){
    uint8_t *cadena;
    cadena = UART0_itoa(255, 16);
    printf("The String in main: %s\n",cadena);
}

/*Declaración de funciones*/
uint8_t *UART0_itoa(uint16_t number, uint8_t base){
  uint8_t *aux;
  *aux = '\0';
  while(number){
    *--aux = (number%base>9)?(number%base)+'7':(number%base)+'0';
    number/=base;
  }
  //printf("The String in the function: %s\n",aux);
  return aux;
}
谢尔盖·卡利尼琴科

问题是您没有分配任何内存aux- 它是一个未初始化的指针。你写给它的任何东西,包括 的初始赋值*aux = '\0',都是未定义的行为。

您需要更改代码以获取输出缓冲区,或者使用malloc. 尝试向后写入数字是一个不错的方法 - 您可以通过传递缓冲区的结尾来使其工作,如下所示:

uint8_t *UART0_itoa(uint16_t number, uint8_t base, char *aux){
    while(number){
        *--aux = (number%base>9)?(number%base)+'7':(number%base)+'0';
        number/=base;
    }
    return aux;
}

并打电话

char buf[16];
cadena = UART0_itoa(255, 16, &buf[15]);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

printf的原型和实现

来自分类Dev

如何使用printf()实现可变字段宽度?

来自分类Dev

使用printf填充0的问题

来自分类Dev

使用printf函数重复图案

来自分类Dev

Printf()和fgets()的问题

来自分类Dev

使用Java的printf方法打印问题

来自分类Dev

使用printf函数未显示浮点值

来自分类Dev

循环使用printf和fgets

来自分类Dev

在scanf和printf中使用%

来自分类Dev

使用printf格式的变量

来自分类Dev

使用Printf转义变量

来自分类Dev

Java使用printf的数组

来自分类Dev

在printf中使用。*

来自分类Dev

使用printf输出变量

来自分类Dev

不使用printf在NASM中打印ARGC

来自分类Dev

自己声明printf函数(使用Vistual Studio 2012和C ++)

来自分类Dev

在bash函数调用中使用'echo'和'printf'

来自分类Dev

有关在printf函数中使用的未初始化的整数指针的行为的问题

来自分类Dev

Printf,scanf和For Loop问题

来自分类Dev

如果数字 < 10,则仅使用 printf 使用 printf 空格

来自分类Dev

使用ncurses之后的printf()/ puts()

来自分类Dev

使用printf可以吗?

来自分类Dev

在printf中使用%p吗?

来自分类Dev

在/ bin / bash中使用的printf

来自分类Dev

在printf中使用%p吗?

来自分类Dev

在/ bin / bash中使用的printf

来自分类Dev

printf后如何使用uniq

来自分类Dev

在替代中使用vim的printf

来自分类Dev

何时使用 printf 与 fprintf(stderr)