-2

我只是为自己的 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;
}
4

1 回答 1

0

问题是您没有分配任何内存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]);
于 2017-06-10T20:32:07.793 回答