我不确定我是不是在做梦,因为我无法在任何地方找到这个功能。该函数调用2个字符串进行连接,然后将指针返回到新分配的内存块,并将2个字符串融合。
有谁知道这样的功能?
答案 0 :(得分:3)
我不知道C标准中有类似内容; POSIX C包含strdup
,它返回一个新分配的字符串副本,但这不是你要问的。
不过,您可以自己轻松构建它:
char * strcat_alloc(const char * first, const char * second)
{
size_t s1=strlen(first), s2=strlen(second), stot=s1+s2+1;
// Length overflow check (see @R.. comment)
if(stot<s2+1)
return NULL;
char * ret = malloc(stot);
if(ret==NULL)
return NULL;
strcpy(ret,first);
strcpy(ret+s1, second);
return ret;
}
答案 1 :(得分:1)
你能想到GLib
的g_strconcat()
功能吗?它不是相当相同的东西:它需要一个NULL
- 终止的字符串列表,而不仅仅是两个字符串。
没有标准函数将字符串连接到libc
中新分配的字符串。
答案 2 :(得分:0)
请检查此问题:Using strcat in C
此外,glib提供了许多处理字符串的函数,如果你能负担得起额外的依赖。
答案 3 :(得分:0)
我不知道现成的,但是这个经过轻度测试的实施怎么样:
char* strdup_cat( char const* s1, char const* s2)
{
size_t siz1 = strlen(s1);
size_t siz2 = strlen(s2);
char* result = (char*) malloc(siz1 + siz2 + 1);
if (result) {
memcpy( result, s1, siz1);
memcpy( result + siz1, s2, siz2 + 1);
}
return result;
}