如何将char加入常量char *?

时间:2011-08-23 10:46:51

标签: c join char strcat const-char

我有一个连接两个常量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;
}

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:2)

如果您想加入单个字符,则必须编写一个单独的函数,该函数将s2中的字符数量附加到其中。

答案 2 :(得分:1)

最好的方法是创建一个允许向字符串添加单个字符的新函数。 但是如果您出于某种原因想要使用join()函数,您还可以按以下步骤操作:

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

*buffer = command[0];
halloween = join("hallowee", buffer);