2015-01-13 65 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是指针。你不能总结指针,你只能创建它们的差异(这是整数)。

相关问题