我知道strcat(dest, src)
将src
追加到dest
,然后返回dest
。
现在,如果我想将dest
追加到src
- 即在src
中dest
之前插入字符串dest
- 是否有办法做到这一点?
我尝试使用类似
的strcat
dest = strcat(dest, src);
但无法使其发挥作用。
答案 0 :(得分:5)
如果您想在不修改src
的情况下执行此操作,则可以分两步完成:
strcpy(temp, src);
strcat(temp, dest);
为了清楚起见,省略了所有错误处理以及temp
足够大的确定。
答案 1 :(得分:4)
这是一个经过轻度测试的strlprecat()
实现,它或多或少遵循OpenBSD的'strlxxx()'函数风格:
因此,此函数永远不会导致缓冲区溢出,但可能会导致截断的字符串(因此会破坏缓冲区中的原始字符串)。
无论如何,我发现一个类似的功能偶尔会有用:
size_t
strlprecat( char* dst, const char * src, size_t size)
{
size_t dstlen = strnlen( dst, size);
size_t srclen = strlen( src);
size_t srcChars = srclen;
size_t dstChars = dstlen;
if (0 == size) {
/* we can't write anything into the dst buffer */
/* -- bail out */
return( srclen + dstlen);
}
/* determine how much space we need to add to front of dst */
if (srcChars >= size) {
/* we can't even fit all of src into dst */
srcChars = size - 1;
}
/* now figure out how many of dst's characters will fit in the remaining buffer */
if ((srcChars + dstChars) >= size) {
dstChars = size - srcChars - 1;
}
/* move dst to new location, truncating if necessary */
memmove( dst+srcChars, dst, dstChars);
/* copy src into the spot we just made for it */
memcpy( dst, src, srcChars);
/* make sure the whole thing is terminated properly */
dst[srcChars + dstChars] = '\0';
return( srclen + dstlen);
}
随意捣乱,这样它就不会处理缓冲区长度(盲目地将内容移动到所需的位置),或者只是在缓冲区不够大的情况下只返回错误而不做任何事情。
哦,如果你修复了任何错误,当然可以发表评论。