使用 printf 和不使用它实现 itoa 函数的问题
Problems implementing a itoa function with printf and without it
我只是为我自己的 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 = '[=10=]';
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 = '[=13=]'
的初始分配,都是未定义的行为。
您需要更改代码以获取输出缓冲区,或使用 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]);
我只是为我自己的 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 = '[=10=]';
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 = '[=13=]'
的初始分配,都是未定义的行为。
您需要更改代码以获取输出缓冲区,或使用 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]);