日期:2014-05-16  浏览次数:20715 次

传char * 字符串问题
下面是一个函数,将int数组转化为字符数组
void unIntArraryTochar(unsigned  *sha1,char *md, int size)
{
md = (char*)malloc(20*sizeof(char));
  int j = 0;
   for(int i=0; i<size; i++ ){
      unsigned int value = sha1[i];
         md[j] = (char)(value>>24);
         md[++j] = (char)(value>>16);
         md[++j] = (char)(value>>8);
         md[++j] = (char)(value);
         ++j;
   }   

接着是我的调用://sha1是非空的,size也已经赋值了

char *md = NULL;
 unIntArraryTochar(sha1,md,size);

但是我每次运行到这里,调用函数的时候出现段错误。于是我就把md的申请放到了调用unIntArraryTochar的前面,如下:
char *md = (char *)malloc(sizeof(char)*20);
 unIntArraryTochar(sha1,md,size);

这次运行就不会出错了。


我想知道为什么传入空字符串给函数会出现段错误?谢谢大神们帮忙!
------解决方案--------------------
char *md = NULL; 

因为你没有分配内存来存放,就像你把东西挪入某个地方首先要有空间。