char *arrayNombres [] = {"file1","file2","file3"};
Ahi tendrias un array de cadenas.
Cuando accedes al elemento del array estas referenciando el puntero y por lo tanto lo que tenes en fileNames[index] es un solo caracter (char, un byte) y a un caracter no le podes asignar una cadena (char*) como fileSource que en definitiva es un puntero (4/8 bytes en x86/x64). En el otro caso no estas asignando un puntero sino un valor entero, seria equivalente si hicieras algo como por ejemplo:
Código:
transfer->fileNames[index] = 'C';