Sax*_*owl 1 c memory pointers memset pointer-arithmetic
这是原型:
void *memset(void *s, int c, size_t n)
Run Code Online (Sandbox Code Playgroud)
首先我不确定我是否必须返回一些东西,因为当我使用memset时,例如
memset(str, 'a', 5);
Run Code Online (Sandbox Code Playgroud)
代替
str = memset(str, 'a', 5);
Run Code Online (Sandbox Code Playgroud)
这是我的代码所在:
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);
}
Run Code Online (Sandbox Code Playgroud)
我不想在这个函数中使用数组,以更好地理解指针和内存,所以我没有得到2件事: - 如何将int c复制到我的void b指针上的一个字符 - 我要用什么条件来确定它在'\ 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);
}
Run Code Online (Sandbox Code Playgroud)
我要用什么条件来确保它在'\ 0'字符之前停止
memset必须信任传入的长度.memset需要处理一般的内存,而不仅仅是一个0终止的字符串 - 所以不应该进行这样的检查.
如果你反正需要检查一个0字节.你做的
if (*p == 0) //or if(!*p )
break;
Run Code Online (Sandbox Code Playgroud)