问题描述
我需要像 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
否则,它是完全不透明的。