【问题标题】:How can I join a char to a constant char*?如何将 char 加入常量 char*?
【发布时间】:2011-08-23 10:46:50
【问题描述】:

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

【问题讨论】:

    标签: c join char strcat const-char


    【解决方案1】:

    您编写的函数需要两个 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;
    }
    

    【讨论】:

    • 好吧,我明白,我可以更改函数采用的参数,但 strcpy() 和 strcat() 仍然需要 canst char*.. 而我所拥有的是一个简单的 char。所以我需要对命令 [0] 做一些事情,这样我就可以将它与 strcpy() 和 strcat() 一起使用。谢谢
    • 抱歉,没有刷新我的页面。让我看看你编辑
    • 谢谢,我想避免更改函数本身,因为我在其他地方使用它来连接两个 const chars*。都一样谢谢你,我只是为此目的创建另一个。 :-)
    【解决方案2】:

    如果您希望加入单个字符,则必须编写一个单独的函数,该函数将 s2 中的字符数量进行追加。

    【讨论】:

      【解决方案3】:

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

      char *command = "nest";
      char *buffer  = " "; // one space and an implicit trailing '\0'
      char *halloween;
      
      *buffer = command[0];
      halloween = join("hallowee", buffer);  
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-22
        • 1970-01-01
        • 2013-11-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-31
        • 1970-01-01
        相关资源
        最近更新 更多