1

我有一个连接两个常量 char* 并返回结果的函数。我想要做的是将一个 char 加入一个常量 char* 例如

char *command = "nest";
char *halloween =  join("hallowee", command[0]);   //this gives an error

char *join(const char* s1,  const char* s2)
{
    char* result = malloc(strlen(s1) + strlen(s2) + 1);

    if (result)
    {
            strcpy(result, s1);
            strcat(result, s2);
    }

    return result;
}
4

3 回答 3

4

您编写的函数需要两个 C 字符串(即两个const char *变量)。在这里,您的第二个参数command[0]不是指针 ( const char *),而是一个简单的“n”字符 ( const char)。然而,该函数认为您传递的值是一个指针,并试图在由字母“n”的 ASCII 值给出的内存地址中查找字符串,这会导致麻烦。

编辑:要使其工作,您必须更改join功能:

char *join(const char* s1,  const char c)
{
    int len = strlen(s1);
    char* result = malloc(len + 2);

    if (result)
    {
            strcpy(result, s1);
            result[len] = c;         //add the extra character
            result[len+1] = '\0';    //terminate the string
    }

    return result;
}
于 2011-08-23T10:59:02.510 回答
2

如果您希望加入单个字符,则必须编写一个单独的函数来获取s2要追加的字符数量。

于 2011-08-23T10:51:27.090 回答
1

最好的方法是创建一个允许将单个字符添加到字符串的新函数。但是,如果您join()出于某种原因想按原样使用该功能,您也可以按照以下方式进行操作:

char *command = "nest";
char *buffer  = " "; // one space and an implicit trailing '\0'
char *halloween;

*buffer = command[0];
halloween = join("hallowee", buffer);  
于 2011-08-23T13:25:36.410 回答