我基本上是用C编写我自己的字符串函数。
我一直在尝试使用指针执行strcat
函数,似乎无法理解我是应该使用malloc
分配内存还是将其留给堆。
char *my_strcat(const char *s1, const char *s2)
{
const unsigned char *p1 = (const unsigned char *)s1;
const unsigned char *p2 = (const unsigned char *)s2;
unsigned char *string;
//string = malloc(strlen(s1) + strlen(s2) + 1);
while (*p1 != '\0')
{
*string = *p1;
string++;
p1++;
if(*p1 == '\0')
{
while(*p2 != '\0')
{
*string = *p2;
string++;
p2++;
}
}
}
return (char *)string;
}
有关更有效地执行此任务的任何提示或我做错的事情都会很棒!
干杯
修改
好的,所以我得到了一个有效的解决方案,但只是想知道我使用malloc后我应该在哪里释放()它?
char *my_strcat(const char *s1, const char *s2)
{
const unsigned char *p1 = (const unsigned char *)s1;
const unsigned char *p2 = (const unsigned char *)s2;
char *string = malloc(sizeof(char *));
char *res = string;
while (*p1 != '\0')
{
*string = *p1;
string++;
p1++;
}
while (*p2 != '\0')
{
*string = *p2;
string++;
p2++;
}
*string = '\0';
return (char *)res;
}
答案 0 :(得分:3)
首先,我假设分配被错误地注释掉了。
string
,它指向串联结果的 end *string = '\0'
if
条件:如果第一个循环已终止,您知道*p1
指向{{1} } \0
答案 1 :(得分:2)
strcat不会分配任何内存,所以如果你想要完成同样的事情,那么你就不需要使用malloc了。
char* strcat(char* destination,char* source) {
int c = 0;
int sc;
while(destination[c] != 0) { c++; }
for(sc = 0;sc < strlen(source);sc++) {
destination[sc+c] = source[sc];
}
destination[sc+c] = 0;
return destination;
}
答案 2 :(得分:0)
这对我有用。
char* my_strcat(char* a,char* b)
{
int i,j;
for(i=0;a[i];i++);
for(j=0;b[j];j++,i++)
a[i]=b[j];
a[i]='\0';
}