c中二进制表达式的无效操作数('const char *'和'const char *')

时间:2015-01-13 14:55:02

标签: c string

我的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 *')

我不知道为什么会收到此错误。 我在互联网上搜索过,而且我找不到如何修复它。

2 个答案:

答案 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)

s1s2是指针。你不能对指针求和,你只能创建它们的差异(这是整数)。