我不是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?
}
1条答案
按热度按时间wwtsj6pe1#
char encrypted_string[strlen(string)];
是一个数组,在表达式中使用时会衰减为char*
。char
(整数型别)。相关帖子:"Pointer from integer/integer from pointer without a cast" issues
请注意:这应该返回char而不是char*
这真的没有任何意义。
我似乎通过将其改为char *encrypt来解决这个问题,但这没有意义。
确实如此,但可能不是你想的那样......你 * 不能 * 返回一个指向函数内部局部数组的指针,正如任何像样的初级学习材料(和成千上万的其他SO帖子)所解释的那样。
你可以通过调用分配来修复你的程序,并通过一个参数返回结果。或者返回一个
char*
给一个动态分配的字符串,但是在这种情况下要注意内存泄漏。也可能存在以下错误:应该是
j
而不是i
。