E' chiaro che il problema sta nel fatto che non hai inserito i terminatori, se hai una stringa che dovrebbe essere: "12345678" e te la stampa più lunga, è perchè la printf non sa quando fermarsi a stampare.Se c' era il terminatore come nono elemento era impossibile che ti stampava una stringa più lunga.
Prova questo:
codice:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int altriCodici (char codice[], char sede[], char prodotto[], char caratteristiche[]);
int numero (char alfa);


int main ()
{
    char stringa[24], codice[9], sede[5], prodotto[9], caratteristiche[5];
    
    printf ("\n Inserisci codice: ");
    scanf ("%s", stringa);
   
        
    strncpy (codice, stringa, 8);
    
    
    strncpy (prodotto, &stringa[8], 8);
   
    
    strncpy (sede, &stringa[16], 4);
    
    
    strncpy (caratteristiche, &stringa[20], 4);
    codice[8]=0;
    prodotto[8]=0;
    sede[4]=0;
    caratteristiche[4]=0;
    
     printf ("\n codice: %s", codice);
     printf ("\n prodotto: %s", prodotto);
     printf ("\n sede: %s", sede);
     printf ("\n caratt: %s", caratteristiche);
     
         
    printf ("\n risulatato: %d", altriCodici(codice, sede, prodotto, caratteristiche));
    


    printf ("\n\n\n---\n");
    system ("pause");
}