![](/img/trans.png)
[英]Is it legal to cast a function returning an object pointer to a function returning a void pointer?
[英]Function to append strings returning pointer/cast error
我正在嘗試創建一個接受兩個輸入字符串dest和src的函數,並將src字符串附加到dest字符串。
下面是我目前的功能。 但是,當我嘗試使用它時,出現錯誤,指出“從沒有強制轉換的函數返回'char'”。 我知道我的錯誤涉及return語句以及如何將其用作指針,但是我不確定如何解決它。
char* strcat(char dest[], char src[]) {
int destL = lenstr(dest);
int srcL = lenstr(src);
char result[destL + srcL];
int i;
for(i = 0; i < destL; i++){
result[i] = dest[i];
}
for(i = destL; i < destL+srcL; i++){
result[i] = src[i-destL];
}
return *result;
}
lenstr函數是:
int lenstr(char* s) {
int len = 0;
while(s[len++] != '\0');
return len-1;
}
您不能返回本地聲明的數組。 可以,但是由於數據不再有效,可能會隨時覆蓋它們。
您需要做的是這樣的:
char* strcat(char dest[], char src[]) {
char * result = malloc((lenstr(dest)+lenstr(src)+1) * sizeof *result);
// Code to copy data
return result;
}
請注意, +1
對於為\\0
終止符騰出空間很重要。
但是,當我嘗試使用它時,出現錯誤,指出“從沒有強制轉換的函數返回'char'”。
該錯誤僅表示您的返回值與函數聲明不匹配。 在函數聲明中,您提到它返回一個char *
。 但是,在實際的return語句中,您將返回*result
,這是一個已取消引用的char指針,即char
。
代碼中的第二個問題是您要從該函數返回一個數組。 在方法中使用數組分配的內存將對調用方方法不可用。 您需要在堆上創建內存並返回指向它的指針,然后讓調用方在使用后釋放內存。
簽出以下工作代碼:
char* strcat1(char dest[], char src[]) {
int destL = lenstr(dest);
int srcL = lenstr(src);
char * result = malloc(sizeof(char) * (destL + srcL));
int i;
for(i = 0; i < destL; i++){
result[i] = dest[i];
}
for(i = destL; i < destL+srcL; i++){
result[i] = src[i-destL];
}
return result;
}
請確保呼叫者釋放了結果,如下所示:
char * result = strcat1("hi", "ho");
printf(result);
free(result);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.