首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

一段简单的C语言有关问题

2012-03-17 
一段简单的C语言问题程序如下:(有点乱)#includestdio.h#includestring.hintmain(){char*binto()intn

一段简单的C语言问题
程序如下:(有点乱)
#include   <stdio.h>
#include   <string.h>
int   main()  
{
char   *binto();
int   n;
char   *immbintohex(char   imm[17]);
char   r[17]= "1001010000000001 ";
char   *s;
s=immbintohex(r);
printf( "s=%s ",s);
        scanf( "%d ",&n);
return   0;
}
char   *immbintohex(char   imm[17])
{
char   ret[7];
int   i,j;
long   int   k;
char   p[5];
        for(i=0;i <16;i=i+4)
{
j=i/4;
k=(imm[i]- '0 ')*8+(imm[i+1]- '0 ')*4+(imm[i+2]- '0 ')*2+(imm[i+3]- '0 ')*1;
p[j]=k+48;
}
ret[0]= '0 ';
ret[1]= 'x ';
ret[2]=0;
return   ret;
}
如果我把其中的
        for(i=0;i <16;i=i+4)
{
j=i/4;
k=(imm[i]- '0 ')*8+(imm[i+1]- '0 ')*4+(imm[i+2]- '0 ')*2+(imm[i+3]- '0 ')*1;
p[j]=k+48;
}
去掉,显示结果为s=0x
加上时显示的却是乱码,而这段程序没有影响ret的值或地址之类的,请高手解释一下原因?如果想保留那段程序,怎样才能显示正确的结果?

[解决办法]
函数有问题,返回了指向局部变量的指针,
函数返回时候,指针的空间已经释放,此乃野指针,return ret;
[解决办法]
不知道你想得到什么数据,想要得到某一表达式的值,可以考虑使用全局变量。。。
[解决办法]
s=0x9401 //是不是想这样显示?

改一下就成了.

char ret[10]; //全局量

ret[0]= '0 ';
ret[1]= 'x ';
//ret[2]=0;
strcat(ret,p);
[解决办法]
还有一种办法:就是你的ret是new出来的,函数结束时不要释放,这样ret就可以了。不过要记得释放。
#include <stdio.h>
#include <string.h>
#include <malloc.h>

int main()
{
char *binto();
int n;
char *immbintohex(char imm[17]);
char r[17]= "1001010000000001 ";
char *s;
s=immbintohex(r);
printf( "s=%s ",s);
free(s);
s=NULL;
scanf( "%d ",&n);
return 0;
}
char *immbintohex(char imm[17])
{
char *ret;
int i,j;
long int k;
char p[5];

ret = (char*)malloc(7*sizeof(char));
for(i=0;i <16;i=i+4)
{
j=i/4;
k=(imm[i]- '0 ')*8+(imm[i+1]- '0 ')*4+(imm[i+2]- '0 ')*2+(imm[i+3]- '0 ')*1;
p[j]=k+48;
}
ret[0]= '0 ';
ret[1]= 'x ';
ret[2]=0;
return ret;
}

[解决办法]
我一般很少用这样声明, 我习惯这样:
char* Convert(char* ch_from, char * to);
void * Convert(char* ch_from, char * to);
这样就不会出现问题了

热点排行