我基本上編碼我自己的字符串函數C.用自己的strcat函數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;
}
你會更好地執行strncat ... strcat()是應用程序中堆棧溢出漏洞的主要來源。 –
如何從strcat()中獲得堆棧溢出?緩衝區溢出我明白,但是...... – mimicocotopus
'string'需要指向'p2'的末尾。 PS不初始化'字符串'不會「把它留給堆」。 – oldrinb