好的,我已经看到了一些用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/

10-11 23:11