在C中,是否有一种方法来计算用null终止符填充的分配内存的大小?



我需要像strlen这样的东西,但字符串只填充了null终止符"",我需要用另一个字符填充它,直到(不包括)最后一个,如"FFFFFF"。有没有一种方法可以计算出没有错误的大小?

我必须为一个名为"libft"的学校项目实现bzero。然后我的任务是实现strcpy,我在手册页中看到dest需要足够大以接收src的副本,所以我想考虑bzerodeststrcpy上使用的情况,不允许我将dest的大小作为参数传递。我只是想知道(出于好奇)我怎么知道dest有多大,因为我知道strcpy没有考虑到这一点。手册页中有一个警告"小心缓冲区溢出!"(见缺陷。)"。

我现在意识到这在c语言中可能是不可能的。

你问的是你是否知道已经分配了多少内存。

如果它被分配了malloc, no.

如果它是一个在堆栈上分配的数组,比如char foo[10],是的,你可以使用sizeof(foo),但这并没有告诉你任何你不知道的事情。

如果您需要知道字符串的分配大小,则需要在分配时记住它并传递它。您可以使用一个额外的变量,或者您可以创建一个struct,它同时具有字符串和大小。

不,没有通用的方法。如果您的char * input满足*input == '',那么它是一个大小为零的空终止字符串,并且我们无法知道input[n]是否对任何n > 0有效。

但是,如果您可以控制input的分配或任何其他提示,您可以使用信息,例如
input = malloc(N);
/* use N */

否则,是完全不透明的。

最新更新