Gracias Teleko, pero no me ha funcionado tu sugerencia, estoy casi seguro de el fallo no está en este código sino en alguna librería que me falta o algo por el estilo, he probado muchas variantes de la rutina y la mayoría se compilan bién y el programa funciona, yo creo que el puntero viene con un espacio o algún valor erroneo, si viniera vacío saldría de la función...no?... ya he probado a que imprima el nº de posición al lado del caracter y los imprime todos, osea que en realidad recorre toda la cadena pero no devuelve el valor correcto.. o está leyendo posiciones erroneas de memoria o algo de eso pasa.
Cerebro:
antes me dijiste como te funcionaba a ti: char a[ ]="abcdefg"; y te dije que el compilador no me lo aceptaba, pero era solo un error de escritura, así si me lo acepta: char a[]="abcdefg"; o así: char a[8]="abcdefg"; pero esto sigue haciendo lo mismo.