簡體   English   中英

附加字符串返回指針/廣播錯誤的函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM