La funcion scanf solo lee del teclado hasta encontrar un blanco(espacio, tabulador o salto de linea). Si vos ingresas "San Juan"
solo en el arreglo de char se almacena "San", el resto se descarta por el fflush(stdin). En vez de scanf usa fgets...
El codigo lo vi muy por encima pero te dejo algunas cosas para modificar:
1 - a diferencia de los arreglos donde la asignacion entre ellos no es posible, con las estructuras
si es posible. Es decir se puede hacer algo como:
Sabiendo esto la funcion listado() se va a reducir bastante
2 - En la funcion modifica(), en la busqueda
primero incrementas a j, lo cual esta mal ya que nunca comparas cuando j es igual a cero(estas omitiendo la posicion 0 de reg2)..
Ademas(suponiendo que la funcion buscar anda bien) cuando haces la modificacion de los datos usas como indice la variable
codigo_campo cuando deberias usar
j
3 - El ";"(punto y coma) no es necesario despues de una llave de cierre de un bloque
SAludos
PD: usa la Highlight para poner codigo