Вы заявляете, что получаете «нарушение доступа». Это означает, что вы вызываете функцию с ненулевым значением для 's', однако, либо 's' не было правильно инициализировано
// bad - s will have some arbitrary value as allocated on the stack (all bets are off)
char *s;
memset(s,0,100);
// good
char s[100];
memset(s,0,100);
// bad - the memset will generate an access violation on byte 101
char s[100];
memset(s,0,101);
// good
char *s = malloc(100);
memset(s,0,100);
** одна заметка, не связанная с нарушением прав доступа ... возвращение 's' так, как вы делаете, отличается от обычного memset () в string.h В этой библиотеке возвращаемое значение должно быть значением 's' в качестве входных данных. В вашем коде вы возвращаете указатель на байт после последнего байта, который генерирует нарушение прав доступа. например:
// good
char *s = malloc(100);
char *d = memset(s,0,100);
printf("%s\n",d); // generates an access violation
в memset () doc, d и s должны иметь одинаковое значение. В вашем коде d = s [101];