Arrays 如何将char添加到char[]的开头,这比memove更安全

Arrays 如何将char添加到char[]的开头,这比memove更安全,arrays,c,char,Arrays,C,Char,我通过执行以下操作实现了如何从char数组的开头添加和删除单个char //将字符1添加到buf的开头 memmove(buf_t+1、buf_t、msgLen_t); buf_t[0]=“1”; msgLen_t++; //删除buf的第一个字符 memmove(buf_s,buf_s+1,strlen(buf_s+1)+1); 格伦女士--; 但是在读取文档时,当数组重叠时会出现意外行为,这在我的程序中发生,并损坏了不同的buf数组 向字符数组的开头添加字符并将其删除的安全方法是什么?谢谢

我通过执行以下操作实现了如何从char数组的开头添加和删除单个char

//将字符1添加到buf的开头
memmove(buf_t+1、buf_t、msgLen_t);
buf_t[0]=“1”;
msgLen_t++;
//删除buf的第一个字符
memmove(buf_s,buf_s+1,strlen(buf_s+1)+1);
格伦女士--;
但是在读取文档时,当数组重叠时会出现意外行为,这在我的程序中发生,并损坏了不同的buf数组


向字符数组的开头添加字符并将其删除的安全方法是什么?谢谢你能给我的任何帮助。

什么是
buf\u t
声明的?你能发布一个完整的吗?你所说的“当数组重叠时”是什么意思?这些是字符串还是字符数组?在第一种情况下,您使用msgLen,建议使用数组,而在第二种情况下,您使用strlen建议字符串。如果您将数组声明为
buf_t[1024]
,那么在调用
memmove
之前,您需要确保
msgLen_t
小于1024。否则,将在数组末尾写入一个字节。使用源和目标重叠的
memmove
也没有问题。这就是它的设计目的。它是
memcpy
不应该与重叠的源和目标一起使用。顺便说一句:
strlen(buf_s+1)+1
strlen(buf_s)
相同,只是有一个空字符串。如果字符串为空,
strlen(buf_s+1)+1
无效。另外,对于空字符串,您不应该调用
memmove
,因为没有任何东西可以移动。