[英]Understanding code of function strlen in C Programming
我得到了在 C 编程中重新创建函数 strlen 的问题的解决方案,如下所示,我需要帮助理解代码的实际作用。
void *ft_memset(void *b, int c, size_t len)
{
size_t i;
i = 0;
while (i < len)
{
((unsigned char *)b)[i] = c;
i++;
}
return (b);
}
我最大的疑问是((unsigned char *)b)[i] = c
的含义,特别是因为我不理解( *)b
,以及在void
函数中返回b
的需要。
非常感谢您的帮助,如果我在堆栈溢出的第一篇文章中做错了什么,我深表歉意。
让我们分解一下,尽管我的 C 技能有些生疏。 欢迎编辑:)
void *ft_memset(void *b, int c, size_t len)
{
size_t i;
i = 0;
while (i < len)
{
((unsigned char *)b)[i] = c;
i++;
}
return (b);
}
首先,您声明了一个名为ft_memset
的函数,它返回void *
。
void *
表示指向任何对象的指针。 它只是一个数字,指向一个内存地址。 但我们不知道其中的内容,因为它没有正确注释。
你的函数接受三个参数: b
是一个指向任何东西的指针(或者如果你愿意的话,也可以是 void 指针) c
是一个int
32 位有符号整数。 len
是一个size_t
,通常是无符号整数的别名。 在此处阅读有关size_t
的更多信息
您的函数遍历前len
个字节并将c
的值设置为这些字节。
我们基本上覆盖了b
的前len
个字节的内容。
现在, ((unsigned char*)b)
是什么意思。 该语句将您的void *
转换为unsigned char*
(字节指针),这只是告诉编译器我们将处理b
指向的内容,就好像它们只是一个unsigned char
一样。
稍后我们只是在第i
个位置建立索引并在其中设置值c
。
理解函数strlen的代码
void *ft_memset(void *b, int c, size_t len)
就像void *memset(void *s, int c, size_t n)
。 它们都将值分配给b
指向的内存。 这些函数与strlen()
完全不同。
size_t strlen(const char *s)
不会改变s
指向的内存。 它遍历该内存以查找空字符。
size_t strlen(const char *s) {
const char *end = s;
while (*end != '\0') {
end++;
}
return (size_t)(end - s);
}
// or
size_t strlen(const char *s) {
size_t i = 0;
while (s[i] != '\0') {
i++;
}
return i;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.