user-0 提问: 输入一个数字转换为2进制，程序，将一个换成数组后，就出现了BUG，求高手看看!

回复:
user: user-1
content: 仅供参考：#include <stdio.h> #include <stdlib.h> #include <string.h> #include <locale.h> int main() {     int i,v;     char bs[33];     char b[33];     char hs[9];     char h[9];     char s[4];     char *e;  // 十进制整数转二进制串；     i=1024;     ltoa(i,b,2);     sprintf(bs,"%032s",b);     printf("i=%d,bs=%s\n",i,bs); // 十进制整数转十六进制串；     i=1024;     ltoa(i,h,16);     sprintf(hs,"%08s",h);     printf("i=%d,hs=%s\n",i,hs); // 十六进制字符串转成十进制数     strcpy(hs,"00000400");     sscanf(hs,"%x",&i);     printf("hs=%s,i=%d\n",hs,i); // 二进制字符串转化为十六进制字符串；     strcpy(bs,"00000000000000000000010000000000");     i=strtol(bs,&e,2);     ltoa(i,h,16);     sprintf(hs,"%08s",h);     printf("bs=%s,hs=%s\n",bs,hs); // 二进制字符串转化为十进制数；     strcpy(bs,"00000000000000000000010000000000");     i=strtol(bs,&e,2);     printf("bs=%s,i=%d\n",bs,i); // 十六进制字符串转成二进制串     strcpy(hs,"00000400");     sscanf(hs,"%x",&i);     ltoa(i,b,2);     sprintf(bs,"%032s",b);     printf("hs=%s,bs=%s\n",hs,bs); // ASC\GBK字符串转十六进制串     strcpy(s,"a汉");     i=0;     while (1) {         if (0==s[i]) break;         sprintf(hs+i*2,"%02X",(unsigned char)s[i]);         i++;     }     setlocale(LC_ALL,"chs");     printf("s=%s,hs=%s\n",s,hs); // 十六进制字符串转成汉字（GBK）及字符(ASC)     strcpy(hs,"61BABA");     i=0;     while (1) {         if (1!=sscanf(hs+i*2,"%2x",&v)) break;         s[i]=(char)v;         i++;     }     s[i]=0;     printf("hs=%s,s=%s\n",hs,s);      return 0;  } //i=1024,bs=00000000000000000000010000000000 //i=1024,hs=00000400 //hs=00000400,i=1024 //bs=00000000000000000000010000000000,hs=00000400 //bs=00000000000000000000010000000000,i=1024 //hs=00000400,bs=00000000000000000000010000000000 //s=a汉,hs=61BABA //hs=61BABA,s=a汉

user: user-1
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处，看不懂时双击下一行，直到能看懂为止。

user: user-0
content: 引用 4 楼 user-2的回复:发你错误的代码来啊，另一次说完好好吗 系统只允许发三次回复，我已经都删除了。。

user: user-0
content: 引用 4 楼 user-2的回复:发你错误的代码来啊，另一次说完好好吗 你能帮我改一下，怎么在循环里面使用指针数组，只要在循环里面，数据就会有问题

user: user-2
content: 发你错误的代码来啊，另一次说完好好吗

user: user-0
content: 然后我对程序做了一点小修改，说是修改，不过就是把number换成了number[10]而已，指针也是

user: user-0
content: #define _CRT_SECURE_NO_WARNINGS  #include <stdio.h> #include <malloc.h>  //调用two_binary函数,将10进制数转换为2进制,需要2个参数,第1个是整型变量,第2个是保存有多少位二进制的指针(需要指向整型变量),函数返回储存着顺向二进制的字符串指针 int* two_binary(long long number, int *precord) { 	int j = 0;  	//指针a和b都分配100个整型内存 	int *a = (int*)calloc(100, sizeof(int)); 	if (!a) 	{ 		printf("内存分配错误!\n"); 		return 0; 	}  	int *b = (int*)calloc(100, sizeof(int)); 	if (!b) 	{ 		printf("内存分配错误!\n"); 		return 0; 	}  	//将计算出来逆向二进制储存到a指针,直到要整型变量等于0 	do 	{ 		*(a + *precord) = number % 2; 		number /= 2; 		++*precord; 	} while (number != 0);  	//在循环中将顺向二进制给b指针 	for (j = 0;j < *precord;++j) 	{ 		*(b + j) = *(a + (*precord - j - 1)); 	}  	//释放a指针,b指针由主函数释放 	free(a); 	a = NULL;  	return b; }  int main(void) { 	while (1) 	{ 		int i = 0;  		int *p = NULL;           //指向length变量,储存two_binary函数有多少位2进制 		int length = 0; 		int *precord = &length;  		int number = 0;          //提示输入一个数,如果输入了0,就退出 		printf("输入一个数: "); 		scanf("%d", &number); 		if (number == 0) 		{ 			free(p); 			p = NULL; 			return 0; 		}  		p = two_binary(number, precord);   //调用two_binary函数,用p接收返回储存2进制的指针  		//用循环输出p指针里面的二进制 		for (i = 0;i < *precord;++i) 		{ 			printf("%d", *(p + i)); 		} 		printf("\n\n");  		//释放指针 		free(p); 		p = NULL; 	}  	while (1) 	{ 		getchar(); 	} 	return 0; }

user: user-0
content: 这是上面的运行结果，很正常!