好的,我已经看到了一些用memcpy实现strcat函数的例子。我知道这是有效的,因为不需要分配。但是如何保留用结果字符串覆盖源字符串的内容。
例如,让我们以-:
char *str1 = "Hello";
char *str2 = "World";
str1 = strcat(str1, str2);
如何确保在
str2
中不会被结果“HelloWorld”字符串的内容覆盖?另外,如果字符串只不过是char数组,并且数组的大小是固定的,那么如果我将字节复制到比数组大的数组中,则不需要重新分配内存,这不是不安全吗?
最佳答案
不是不安全,而是undefined behavior。
首先,您试图修改字符串文本,它内在地调用UB。
其次,关于目的地缓冲区的大小,引用man page(emphasis mine)strcat()
函数将src
字符串附加到dest
字符串,覆盖'\0'
结尾处的终止空字节(dest
),然后添加终止空字节。字符串不能重叠,dest
字符串必须有足够的空间用于结果。如果dest
不够大,则程序行为是不可预测的;[…]
关于c - 关于strcat与memcpy的混淆,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41157074/