我相信下面这个问题已经被问过很多次了,但我还是要问一下,因为我还没有找到答案。
我必须重新创建函数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的解释
至于你的问题。不能检查目标的大小。你所拥有的只是一个指针,仅此而已。你必须依赖于源字符串或长度小于目标指针所指向的内存。
还要记住,您不能依赖目标的内容。它的内容可能没有初始化,因此是不确定的。数组或内存通常没有终止符。字符串结束符是约定,不是语言强制的。
首先说明,dest1
和dest2
是类型为char *
的数组,当作为参数传递给函数时,衰减为数组中第一个元素的地址。
你需要确保数组元素在解引用(使用)它们之前指向有效的内存。
,
如何检查函数中缓冲区dest2的大小
好吧,你没有。根据要求,strncpy()
不这样做。此外,您不能仅通过指针来做到这一点,您需要自己跟踪已分配的内存大小,这不是直接从指针推断出来的。