检查缓冲区大小/强度



我相信下面这个问题已经被问过很多次了,但我还是要问一下,因为我还没有找到答案。

我必须重新创建函数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[index](返回0);

编辑:删除dest1和dest2的星星。并增加了ft_strncpy的解释

至于你的问题。不能检查目标的大小。你所拥有的只是一个指针,仅此而已。你必须依赖于源字符串或长度小于目标指针所指向的内存。

还要记住,您不能依赖目标的内容。它的内容可能没有初始化,因此是不确定的。数组或内存通常没有终止符。字符串结束符是约定,不是语言强制的。

首先说明,dest1dest2是类型为char *的数组,当作为参数传递给函数时,衰减为数组中第一个元素的地址。

现在,这里的问题是,第一个元素是未初始化的(野)指针,任何访问该指针指向的内存的尝试都会调用未定义的行为。

你需要确保数组元素在解引用(使用)它们之前指向有效的内存。

,

如何检查函数中缓冲区dest2的大小

好吧,你没有。根据要求,strncpy()不这样做。此外,您不能仅通过指针来做到这一点,您需要自己跟踪已分配的内存大小,这不是直接从指针推断出来的。

相关内容

  • 没有找到相关文章

最新更新