我怎样才能把char
c 添加到char* myChar
?我c
的值为"A"
,并且myChar
值为"LL"
。我怎样才能c
预先myChar
制作"ALL"
?
问问题
3492 次
3 回答
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()
生成的新字符串,否则会出现内存泄漏。
此外,如果您要对同一个字符串执行数百或数千次,那么还有其他方法可以更有效地执行此操作。
于 2011-12-20T00:42:16.390 回答
2
好吧,首先您需要确定新字符串的存储空间。如果我对源的所有了解都是 a 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
代替循环将原始字符上移一位。
于 2011-12-20T00:50:43.113 回答
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';
}
于 2011-12-20T00:57:02.003 回答