Вы не инициализировали переменную j
.Поэтому использование неинициализированной переменной вызывает неопределенное поведение.
Лучше сформировать массив без дубликатов в одном цикле, а не разбивать цикл на цикл и еще один оператор после цикла.
Выможно написать отдельную функцию, например, следующим образом, как показано в демонстрационной программе.
#include <stdio.h>
size_t remove_copy( const int a[], int b[], size_t n )
{
size_t j = 0;
for ( size_t i = 0; i < n; i++ )
{
if ( i == 0 || a[i] != b[j-1] ) b[j++] = a[i];
}
return j;
}
int main(void)
{
int a[] = { 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5 };
int b[sizeof( a ) / sizeof( *a )];
const size_t N = sizeof( a ) / sizeof( *a );
for ( size_t i = 0; i < N; i++ ) printf( "%d ", a[i] );
putchar( '\n' );
size_t n = remove_copy( a, b, N );
for ( size_t i = 0; i < n; i++ ) printf( "%d ", b[i] );
putchar( '\n' );
return 0;
}
Вывод программы:
1 2 2 3 3 3 4 4 4 4 5 5
1 2 3 4 5