Проблема заключается в смешении двух петель, которые либо правильные, либо почти правильные.Измените:
for(i = c; i < n; i++)
{
while(j < k)
{
b[i] = a[j];
j++;
}
}
на
for(i = c; i < n; i++)
{
b[i] = a[j];
j++;
}
Или
while(j < k)
{
b[i] = a[j];
j++;
i++;
}
Ваш выбор.
Но, в конце концов, для этой ситуацииЯ бы пошел для использования memcpy
для скорости, как в примере ниже:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
int n;
scanf("%d", &n);
int *a = malloc(n * sizeof(*a));
for (int i = 0; i < n; i++)
scanf("%d", &a[i]);
int k;
scanf("%d", &k);
int *b = malloc(n * sizeof(*b));
memcpy(b, &a[k], (n - k) * sizeof(*a));
memcpy(&b[n - k], a, k * sizeof(*a));
for (int i = 0; i < n; i++)
printf("%d ", b[i]);
free(b);
free(a);
return EXIT_SUCCESS;
}