C 警告:赋值从指针生成整数,但不使用字符和字符串强制转换

C 警告:赋值从指针生成整数,但不使用字符和字符串强制转换,c,C,我在这段代码中不断遇到分段错误,目前我正在学习C。。有人能帮我吗 错误位置: char *m; char *as = concat("helloworld", buf); *m = sha1(as); <<<<<< as printf("%s\n", m); free(as); sha1功能: char *sha1( char *val ){ int msg_length = strlen(

我在这段代码中不断遇到分段错误,目前我正在学习C。。有人能帮我吗

错误位置:

char *m;
char *as = concat("helloworld", buf);
*m = sha1(as);                               <<<<<< as
printf("%s\n", m);
free(as);
sha1功能:

char *sha1( char *val ){

   int msg_length = strlen( val );
   int hash_length = gcry_md_get_algo_dlen( GCRY_MD_SHA1 );
   unsigned char hash[ hash_length ];
   char *out = (char *) malloc( sizeof(char) * ((hash_length*2)+1) );
   char *p = out;
   gcry_md_hash_buffer( GCRY_MD_SHA1, hash, val, msg_length );
   int i;
   for ( i = 0; i < hash_length; i++, p += 2 ) {
      snprintf ( p, 3, "%02x", hash[i] );
   }
   return out;
}
提前感谢

sha1()
返回
char*
,因此您需要更改
*m=sha1(as)
m=sha(as)<代码>*m
属于
char
类型,而不是
char*

更改
*m=sha1(as)
m=sha1(as)
*m
char
值,而不是
char*

第二个问题:

在实际代码中,您可以在这里检查malloc中的错误

所有这些都是关于错误处理的,您需要根据
NULL
检查从
malloc
返回的指针

m = sha1(as); 
*m
取消对指针的引用,它表示指针下的字符

至于
malloc
,如果它不能分配内存,if将返回
NULL
指针。你应该检查一下。

问题出在*m:

char *m = sha1("helloworld");    < OK
*m = sha1("helloworld");         < fail
char*m=sha1(“helloworld”);<好啊
*m=sha1(“helloworld”);<失败

*m=sha1(as);在哪里定义了m?
char*m在上面,复制失败sha1返回一个字符*并且m已经是一个字符*所以m=sha1(as)没有*应该做得更好这个问题有3个问题吗?(警告,seg故障+malloc错误检查的解释)你真的应该坚持一个,或者至少把它们放在一起。对不起,我有时忘记了这不是一个论坛。。下次再想想,警告就是分段错误的原因
m = sha1(as); 
char *m = sha1("helloworld");    < OK
*m = sha1("helloworld");         < fail