This is fairly elegant, in my opinion
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void print_data(const int *data, size_t len)
{
size_t n = 0;
printf("len = %d, data = ", len);
for (; n < len; n++)
printf("%d,", data[n]);
printf("\n");
}//print_data
void remove_data(int key, int *data, size_t *plen)
{
int *data_end = data + *plen;
while (data < data_end)
{
if (*data == key)
{
(*plen)--;
data_end--;
memmove(data, data + 1, (int)data_end - (int)data);
continue;
}//if
data++;
}//while
}//remove_data
int main()
{
int data[] = {0,0,1,2,0,3,4,0,5,6,7,0,8,9,0,};
size_t data_sz = sizeof(data)/sizeof(data[0]);
print_data(data, data_sz);
remove_data(0, data, &data_sz);
print_data(data, data_sz);
return 0;
}//main
gg