#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void mask_email(const char *email, char *out, size_t out_size) {
const char *at = strchr(email, '@');
if (!at) {
// No '@' → copy as-is
strncpy(out, email, out_size);
out[out_size - 1] = '\0';
return;
}
size_t prefix_len = at - email;
size_t email_len = strlen(email);
if (prefix_len < 2) {
// Too short to mask → copy as-is
strncpy(out, email, out_size);
out[out_size - 1] = '\0';
return;
}
if (email_len + 1 > out_size) {
// Output buffer too small
if (out_size > 0) out[0] = '\0';
return;
}
// First character stays
out[0] = email[0];
// Mask characters between first char and '@'
memset(out + 1, '*', prefix_len - 1);
// Copy the rest (including '@' and domain)
strcpy(out + prefix_len, email + prefix_len);
}
int main() {
const char *email = "john.doe@example.com";
char masked[256];
mask_email(email, masked, sizeof(masked));
printf("%s\n", masked);
return 0;
}
/*
run:
j*******@example.com
*/