2015-01-13 64 views
3

我在我的strjoin代碼中有錯誤。我的代碼的路徑是允許一個字符串,並返回一個以'\0'連接兩個字符串結束的字符串。無效的操作數到二進制表達式('const char *'和'const char *')c

#include "libft.h" 

char *ft_strjoin(const char *s1, const char *s2) 
{ 
    char *s3; 

    s3 = malloc(sizeof(char) * (s1 + s2)); // I've an error in this line 

    s3 = ft_strcat((char *)s1, s2); 
    return (s3); 
} 

我的錯誤:

invalid operands to binary expression ('const char *' and 'const char *') 

我不知道爲什麼我得到這個錯誤。 我在網上搜索過,我找不到如何修復它。

+0

謝謝,我錯了! – Vorbide

+0

也許你想要'(strlen(s1)+ strlen(s2))'而不是'(s1 + s2)'? –

+1

這段代碼「(s1 + s2)'的目的究竟是什麼? – alk

回答

6

您不能將兩個指針添加在一起。如果您要爲結果字符串分配足夠的空間,你必須使用strlen加1爲NUL終止

char* s3 = malloc(strlen(s1) + strlen(s2) + 1); 

想想這樣的事情:

int* a = /*...*/; 
int* b = /*...*/; 
a + b; // what is the significance of this? 

添加兩個指針不作感覺,結果是沒有意義的。 C字符串是字符數組,但只要指針指向就不會給它特殊的規則。你必須使用提供的圖書館設施,或者自己推出(正如你所做的那樣)。

我不確定你是否知道你在調用cat函數時正在做什麼。使用的庫str職能如下:

// after the malloc 
strcpy(s3, s1); // copy s1 into s3 
strcat(s3, s2); // append s2 onto the end of s3 

你需要在調用你的貓功能的演員陣容,你這樣做是錯誤的贈品​​。除非你完全確定你需要他們並理解他們爲什麼以及他們在做什麼,否則不要使用演員。

你有它成立將有效地追加到s2s1末,然後分配給s1s3方式。這會泄漏剛分配的塊,可能會超出緩衝區,並修改s1的先前內容。

-1

s1s2是指針。你不能總結指針,你只能創建它們的差異(這是整數)。

相關問題