我相信下面这个问题已经被问了很多,但我会问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的星。并增加了对什么是金融时报的解释。

最佳答案

至于你的问题。你不能检查目的地的大小。你只有一个指针,没有别的了。必须依赖源字符串或长度小于目标指针指向的内存。
还要记住,你不能依赖目的地的内容。其内容可能未初始化,因此不确定。数组或内存通常没有终止符。字符串终止符是一种约定,而不是由语言强制的。

09-04 03:50