我對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?
}
uj5u.com熱心網友回復:
char encrypted_string[strlen(string)];是一個陣列,char*在運算式中使用時衰減為 a。- 你的函式回傳
char一個整數型別。 - 因此:“從回傳型別為 'char' 的函式中回傳 'char *'”
相關文章:“來自整數的指標/來自沒有強制轉換的指標的整數”問題
請注意:這應該回傳 char 而不是 char*
這真的沒有任何意義。
我似乎通過將其更改為 char *encrypt 來解決此問題。但這沒有意義。
確實如此,但可能不是因為您認為的原因...您無法在函式內回傳指向本地陣列的指標,正如任何體面的初學者級學習材料(以及數千個其他 SO 帖子)所解釋的那樣。
您可以改用呼叫者分配來修復程式,并通過引數回傳結果。或將 a 回傳char*到動態分配的字串,但在這種情況下請注意記憶體泄漏。
這里也可能存在錯誤:for(int j = 0; i < strlen(CHARSET); i ). 應該j不是i。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/532307.html
標籤:C指针海合会
