我相信下面这个问题已经被问了很多,但我会问btw,因为我还没有找到答案。
我必须重新创建strncpy函数(我不需要/不需要任何关于这个的解决方案),而且我无法重现这个函数的精确行为。
这是我的代码:
int main(void)
{
char dest1[15];
char dest2[15];
char *src = "abcdefgh";
size_t n = 16;
putstr(strncpy(dest1, src, n);
// the output is : [1] 23975 abort ./a.out
putstr(ft_strncpy(dest2, src, n);
// the output is : abcde[1] 23975 abort ./a.out
return (0);
}
我认为strncpy函数检查dest1的缓冲区大小,并在返回某些内容之前将其与n进行比较。
函数ft_strncpy是我的函数,strncpy的副本。
如何检查函数中缓冲区dest2的大小?它不适用于dest2++(无限循环)或dest2[索引](返回0);
编辑:删除dest1和dest2的星。并增加了对什么是金融时报的解释。
最佳答案
至于你的问题。你不能检查目的地的大小。你只有一个指针,没有别的了。必须依赖源字符串或长度小于目标指针指向的内存。
还要记住,你不能依赖目的地的内容。其内容可能未初始化,因此不确定。数组或内存通常没有终止符。字符串终止符是一种约定,而不是由语言强制的。