在 C 中,有没有办法计算填充了空终止符的已分配内存的大小?

问题描述

我需要像 strlen 这样的东西,但字符串只填充了空终止符 "\0\0\0\0\0\0\0",我需要用另一个字符填充它,直到(不包括)最后一个 \0 像所以"FFFFFF\0"。有没有办法计算尺寸没有错误

我必须为一个名为“libft”的学校项目实现 bzero。然后我的任务是实现 strcpy,我在手册页中看到 dest 需要足够大才能接收 src 的副本,所以我想考虑 {{ 1}} 用于 bzero 并且 dest 不允许我将 strcpy 的大小作为参数传递。我只是想知道(出于好奇)我怎么知道 dest 有多大,因为我知道 dest 没有考虑到这一点。手册页中有一条警告“注意缓冲区溢出!(请参阅 BUGS。)”。

我现在意识到这在 C 中可能是不可能的。

解决方法

您要问的是您是否可以知道分配了多少内存。

如果是用 malloc 分配的,则否。

如果它是在堆栈上分配的数组,例如 char foo[10],是的,您可以使用 sizeof(foo),但这不会告诉您任何您不知道的信息。

如果需要知道字符串的分配大小,需要在分配的时候记住并传递。您可以使用额外的变量,也可以创建一个同时包含字符串和大小的 struct

,

不,没有通用的方法。如果您的 char * input 满足 *input == '\0',那么它是一个大小为零的空终止字符串,我们无法知道 input[n] 是否对 any {{1} }.

但是,如果您可以控制 n > 0 的分配或任何其他提示,您可以使用那个信息,例如

input

否则,它是完全不透明的。