在 C 语言中,有没有一种方法可以计算已分配的充满空终止符的内存大小?
In C, is there a way to calculate the size of allocated memory filled with null-terminators?
我需要 strlen
之类的东西,但字符串只填充了空终止符 "[=11=][=11=][=11=][=11=][=11=][=11=][=11=]"
,我需要用另一个字符填充它直到(不包括)最后一个 [=12= ]
这样 "FFFFFF[=13=]"
。有没有办法不出错地计算尺寸?
我必须为一个名为“libft”的学校项目实施 bzero
。然后我的任务是实现 strcpy
,我在手册页中看到 dest
需要足够大才能接收 src
的副本,所以我想考虑 bzero
用于 dest
并且 strcpy
不允许我将 dest
的大小作为参数传递。我只是想知道(出于好奇)我怎么知道 dest
有多大,因为我知道 strcpy
没有考虑到这一点。手册页中有一条警告“小心缓冲区溢出!(请参阅错误。)”。
我现在意识到这在 C 中可能是不可能的。
你问的是能不能知道分配了多少内存
如果是用malloc
分配的,没有。
如果它是在堆栈上分配的数组,例如 char foo[10]
,是的,您可以使用 sizeof(foo)
,但这并不能告诉您任何您不知道的信息。
如果你需要知道字符串的分配大小,你需要在分配时记住它并传递它。您可以使用一个额外的变量,或者您可以创建一个同时具有字符串和大小的 struct
。
不,没有通用的方法。如果您的 char * input
满足 *input == '[=12=]'
,那么它是一个大小为零的空终止字符串,我们无法知道 input[n]
是否对 any n > 0
.
但是,如果您控制了 input
的分配或任何其他提示,则可以使用 that 信息,例如
input = malloc(N);
/* use N */
否则完全不透明
我需要 strlen
之类的东西,但字符串只填充了空终止符 "[=11=][=11=][=11=][=11=][=11=][=11=][=11=]"
,我需要用另一个字符填充它直到(不包括)最后一个 [=12= ]
这样 "FFFFFF[=13=]"
。有没有办法不出错地计算尺寸?
我必须为一个名为“libft”的学校项目实施 bzero
。然后我的任务是实现 strcpy
,我在手册页中看到 dest
需要足够大才能接收 src
的副本,所以我想考虑 bzero
用于 dest
并且 strcpy
不允许我将 dest
的大小作为参数传递。我只是想知道(出于好奇)我怎么知道 dest
有多大,因为我知道 strcpy
没有考虑到这一点。手册页中有一条警告“小心缓冲区溢出!(请参阅错误。)”。
我现在意识到这在 C 中可能是不可能的。
你问的是能不能知道分配了多少内存
如果是用malloc
分配的,没有。
如果它是在堆栈上分配的数组,例如 char foo[10]
,是的,您可以使用 sizeof(foo)
,但这并不能告诉您任何您不知道的信息。
如果你需要知道字符串的分配大小,你需要在分配时记住它并传递它。您可以使用一个额外的变量,或者您可以创建一个同时具有字符串和大小的 struct
。
不,没有通用的方法。如果您的 char * input
满足 *input == '[=12=]'
,那么它是一个大小为零的空终止字符串,我们无法知道 input[n]
是否对 any n > 0
.
但是,如果您控制了 input
的分配或任何其他提示,则可以使用 that 信息,例如
input = malloc(N);
/* use N */
否则完全不透明