[英]my own strcat function using C errors
我基本上是用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之后應該在哪里free()?
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;
}
首先,我假設分配被錯誤地注釋掉了。
string
,它指向串聯結果的末尾 *string = '\\0'
if
條件:如果第一個循環已終止,則知道*p1
指向\\0
char *string = malloc(strlen(s1) + strlen(s2) + 1);
char *res = string;
for (; *p1 ; *string++ = *p1++);
for (; *p2 ; *string++ = *p2++);
*string = '\0';
return res;
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;
}
這對我有用。
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';
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.