/* 整型数字转字符(包括负数) */ #include<stdio.h> #include<stdlib.h> /* 判断这个数字是几位数 */ int num_length(int num) { int length=0; if(num<0) { num*=-1; while(num) { num=num/10; length++; } return length+1; } else { while(num) { num=num/10; length++; } return length; } } /* 把数字进行拆分存入一个字符数组中 */ char *itoa(int num) { int i,pos=0; int length; char *str = (char *)malloc(num_length(num)*sizeof(char)+1); if(str==NULL) { printf("内存申请失败!"); } length = num_length(num); //返回整型数字的位数 /* 1.0 这里遇到了一个问题,就是局部变量 str[length+1] (数组) 在函数结束时即使返回了数组的首地址,即使首地址有效, 但是里面的已经没有意义了,所以在主函数调用时, 输出的内容是乱码,定义成全局变量后解决了这个问题 statci 无法给长度会变化的数组变量进行修饰 2.0 经过测试使用malloc来进行内存的申请一段连续的内存, 然后将转换后的字符存入这个连续的内存中 */ //算法:从高位到低位取数 除10取模从高地址到低地址存存到malloc开辟的内存中 pos=length; *(str+pos)='\0'; //地址最高赋值\0,字符串的最后要加上\0 pos--; if(num<0) //如果是负数 { num*=-1; //*-1转换成正整数方便拆分 while(num) { *(str+pos)=(num%10)+'0'; //数字转成字符+'0' num=num/10; pos--; } *str='-'; //最低位,也就是起始地址赋值'负号 ' } else { while(num) { *(str+pos)=(num%10)+'0'; //数字转成字符+'0' num=num/10; pos--; } } return str; } int main(void) { int number=0; char *p; scanf("%d",&number); printf("%s",itoa(number)); =pitoa(number); free(p);//释放申请的内存空间 p=NULL; //指针赋值为NULL防止野指针的出现 return 0; }
C语言整数转字符串itoa
猜你喜欢
转载自blog.csdn.net/qq1294272813/article/details/78032472
今日推荐
周排行