[英]how to concatenate a char to a char* in C?
如何將char
c char* myChar
到char* 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.