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

Posted

技术标签:

【中文标题】如何在C中将char连接到char *?【英文标题】:how to concatenate a char to a char* in C? 【发布时间】:2011-12-20 00:37:36 【问题描述】:

如何将char c 添加到char* myChar?我有c 的值为"A"myChar 的值为"LL"。如何在 c 前面加上 myChar 以生成 "ALL"

【问题讨论】:

这是作业吗?一般的做法是,沿一个字符移动所有内容,然后在开头插入新字符 第一个不,第二个谢谢 @Keith:为此,您需要保证字符串末尾至少有一个字节的可用空间,这可能适用于他的应用程序,也可能不适用。 大多数 c 字符串操作都假设有内存,例如 strcat 等,或者使用“n”限制操作。内存通常是在操作之外处理的问题 如果我们可以假设在字符串之前有可用内存,那么执行:*(--myChar) = c; 【参考方案1】:

这应该可行:

#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(),否则会出现内存泄漏。

此外,如果您要对同一个字符串执行数百或数千次此操作,那么您可以使用其他方法来提高效率。

【讨论】:

这不会添加到他现有的字符串中,它会创建一个新字符串,您可以将其复制回 str,但不使用 mallocing 更优雅 另外一件事我忘了说:如果你认真写好代码,你应该检查 malloc 的返回值以确保它不为 NULL。如果为 NULL,则打印正确的错误消息并退出。【参考方案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 代替循环将原始字符上移一位。

【讨论】:

【参考方案3】:

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

  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';
    

【讨论】:

以上是关于如何在C中将char连接到char *?的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 如何在C中将const char *转换为char *?

如何在 C 中将 void 指针转换为 char 指针

如何在C中将char转换为整数? [复制]

如何在 C 中将 short 转换为 unsigned char *buf?

如何在 C++ CLR 中将数组<System::Byte> 转换为 char*?

在 C 中将 ascii char[] 转换为十六进制 char[]