【发布时间】:2012-08-29 03:46:52
【问题描述】:
我基本上是在用 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() 获得 Stack Overflow?我理解缓冲区溢出,但是...
-
string需要指向p2的末尾。 PS 未初始化string不会“将其留在堆中”。 -
@MarcB:标准的
strncat()函数有一个设计用来触发错误的接口;太可怕了。 -
@JonathanLeffler 我将一个字符串附加到目标字符串的末尾。我认为,如果您仔细观察,我大致做对了,因为这适用于数组...我要求提示...