簡體   English   中英

如何在C中將一個char鏈接為一個char *?

[英]how to concatenate a char to a char* in C?

如何將char c char* myCharchar* myChar 我的c值為"A" ,而myChar的值為"LL" 如何將c myChar前面以使其成為"ALL"

這應該工作:

#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()后得到的新字符串,否則會發生內存泄漏。

同樣,如果您要對同一個字符串執行數百或數千次此操作,那么還有其他方法可以提高效率。

好吧,首先,您需要弄清楚新字符串的存儲空間。 如果我只知道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代替循環將原始字符上移一個。

可能不是最有效的方法,但這是朝正確方向邁出的一步:這顯然是直接的方法-

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM