我的strjoin
代码中有错误。我的代码的路径是允许一个字符串,并通过连接两个字符串返回以'\0'
结尾的字符串。
#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 :(得分:6)
您无法将两个指针添加到一起。如果要为结果字符串分配足够的空间,则必须使用strlen
并为NUL终止符添加1
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
你需要在你的猫叫功能中扮演一个角色,这是你做错了。除非你完全确定需要它们并理解它们为什么以及它们在做什么,否则不要使用演员表。
您设置的方式会有效地将s2
附加到s1
的末尾,然后将s1
分配给s3
。这将泄漏您刚刚分配的块,可能会超出缓冲区,并修改s1
的先前内容。
答案 1 :(得分:-1)
s1
和s2
是指针。你不能对指针求和,你只能创建它们的差异(这是整数)。