gcc 为什么会有“-Wint转换”警告?

kd3sttzy  于 2022-11-12  发布在  其他
关注(0)|答案(1)|浏览(209)

我不是C新手,但在我看来这没有任何意义。在我char encrypt函数中,我得到了以下警告:

crypt.h: In function ‘encrypt’:
crypt.h:32:9: warning: returning ‘char *’ from a function with return type ‘char’ makes integer from pointer without a cast [-Wint-conversion]
   32 |   return(encrypted_string);
      |         ^

请注意:这应该返回char,而不是char*
我把它改成了char *encrypt,看起来是修复了这个问题。但是这没有意义。有人能解释一下为什么会这样吗?代码看起来是可以工作的,但是清晰度会更好。
下面是我的代码:

char encrypt(char string[])
{
  // allocating new buffer for encrypted string
  // note: normal string
  char encrypted_string[strlen(string)];

  // comparing string to cipher
  for(int i = 0; i < strlen(string); i++)
  {
    for(int j = 0; j < strlen(CHARSET); j++)
    {
      if(string[i] == CHARSET[j])
      {
        encrypted_string[i] = CIPHER[j];
        break;
      }
    }
  }
  return(encrypted_string);// returns pointer?
}
wwtsj6pe

wwtsj6pe1#

  • char encrypted_string[strlen(string)];是一个数组,在表达式中使用时会衰减为char*
  • 您的函数会传回char(整数型别)。
  • 因此:“从返回类型为”char“的函数返回”char *“"

相关帖子:"Pointer from integer/integer from pointer without a cast" issues
请注意:这应该返回char而不是char*
这真的没有任何意义。
我似乎通过将其改为char *encrypt来解决这个问题,但这没有意义。
确实如此,但可能不是你想的那样......你 * 不能 * 返回一个指向函数内部局部数组的指针,正如任何像样的初级学习材料(和成千上万的其他SO帖子)所解释的那样。
你可以通过调用分配来修复你的程序,并通过一个参数返回结果。或者返回一个char*给一个动态分配的字符串,但是在这种情况下要注意内存泄漏。
也可能存在以下错误:应该是j而不是i

相关问题