这是原型:
void *memset(void *s, int c, size_t n)
首先,我不确定是否必须返回某些内容,因为当我使用 memset 时,我会这样做
memset(str, 'a', 5);
代替
str = memset(str, 'a', 5);
这是我的代码所在的位置:
void *my_memset(void *b, int c, int len)
{
int i;
i = 0;
while(b && len > 0)
{
b = c;
b++;
len--;
}
return(b);
}
int main()
{
char *str;
str = strdup("hello");
my_memset(str, 'a', 5);
printf("%s\n", str);
}
我不想在这个函数中使用数组,以更好地理解指针和内存,所以我没有得到两件事:
- 如何将 int c 复制到 void b 指针上的字符中
- 在我的 while 上使用什么条件来确保它在“\0”字符之前停止
编辑:我想知道有没有一种方法可以在不进行强制转换的情况下执行此功能?
如何将 int c 复制到 void b 指针上的字符中
将 void 指针转换为 unsigned char 指针:
void *my_memset(void *b, int c, int len)
{
int i;
unsigned char *p = b;
i = 0;
while(len > 0)
{
*p = c;
p++;
len--;
}
return(b);
}
在我的 while 上使用什么条件来确保它在 '\0' 字符之前停止
memset 必须信任传入的长度。memset 需要在一般内存上工作,而不仅仅是以 0 结尾的字符串 - 因此不应该进行这样的检查。
如果您无论如何都需要检查 0 字节。你会做
if (*p == 0) //or if(!*p )
break;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)