在 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 */

否则完全不透明