如何在C中将char连接到char *?

时间:2011-12-20 00:37:37

标签: c char concatenation prepend

如何将char c添加到char* myChar?我c的值为"A"myChar的值为"LL"。如何将c添加到myChar以制作"ALL"

3 个答案:

答案 0 :(得分:2)

这应该有效:

#include <string.h>    
char * prepend(const char * str, char c)
{
    char * new_string = malloc(strlen(str)+2);  // add 2 to make room for the character we will prepend and the null termination character at the end
    new_string[0] = c;
    strcpy(new_string + 1, str);
    return new_string;
}

在完成使用后,只需记住free()生成的新字符串,否则会导致内存泄漏。

此外,如果您要对相同的字符串执行数百次或数千次,那么您可以采用其他方式来提高效率。

答案 1 :(得分:2)

好吧,首先你需要找出新字符串的存储空间。如果我所知道的源是char *,我不知道它是否指向一个我可以覆盖和/或足够长的缓冲区,或者我是否需要分配一个新的缓冲区。

要分配一个新缓冲区,它应该是这样的:

char * strprep(char c, const char * myChar)
{
    /* length, +1 for c, +1 for '\0'-terminator */
    char * newString = malloc(strlen(myChar) + 2);

    /* out-of-memory condition rolls downhill */
    if (newString == NULL) return NULL;

    /* populate the new string */
    newString[0] = c;
    strcpy(newString + 1, myChar);
    return newString;
}

要覆盖到位,您需要移动字符以为新的字符串开头腾出空间:

char * strprep(char c, char * myChar)
{
    int len = strlen(myChar);
    int i;

    /* Move over! */
    for (i = len; i >= 0; i--) myChar[i + 1] = myChar[i];

    /* Now plug in the new prefix. */
    myChar[0] = c;
    return c;
}

如果您的C库可用,您可以使用memmove代替循环将原始字符向上移动一个。

答案 2 :(得分:0)

可能不是效率最高但这是朝着正确方向迈出的一步:这一步显然是直接的方法 -

  int main()
   {
      int i;
      char tempc;
      for (i=0; i<strlen(str); i++)
      {
        tempc = c;
        c = str[i];
        str[i] = tempc;            
         str[i+1] = c;
      }
       *(str[i+1]) = malloc(1);
       str[i+1] = '\0';
    }