我基本上编码我自己的字符串函数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