la virgola in c separa 2 espressioni, la prima viene solo eseguita, quella che viene valutata è la seconda, per cui

a[strcpy(m, x), 2] è un modo idiota per scrivere
a[2];

codice:
#include <stdio.h>

int main()
{
	int a[] = {1,2,3,4,5,6,7,8,9,0};
	printf("%d\n", a[printf("salve\n"), 2]) ;
	printf("%d\n", a[2]);

}