funzione che restituisce una stringa

purtroppo sono un po' arrugginito su alcuni aspetti del c... e da qualche ora sto sbattendo la testa su questo problema:

ho una stringa dichiarata e inizializzata così:

struct {
  char nome[10];
  unsigned int punti = 0;
  byte falli = 0;
  byte timeout = 0;
} squadraA, squadraB;

...

strcpy(squadraA.nome,"Locali");

in varie parti del programma ho necessità di usare una funzione che mi vada a modificare il valore del campo nome.
questa funzione è una funzione generica che accetta una stringa dall'utente.
a seconda della scelta dell'utente può ritornare il nuovo valore inserito oppure ritorna il valore passato come parametro in fase di chiamata.

ho provato con:

char* function LeggiStringa(const char *valore_iniziale) {
   char temp[10];

  // varie operazioni

  if (conferma) {
    return temp;
  } else {
    return valore_iniziale;
  }
}


char* function LeggiStringa(char valore_iniziale[10]) {
   char temp[10];

  // varie operazioni

  if (conferma) {
    return temp;
  } else {
    return valore_iniziale;
  }
}

void function LeggiStringa(char *valore_ritorno, const char *valore_iniziale) {
   char temp[10];

  // varie operazioni

  if (conferma) {
    valore_ritorno = temp;
  } else {
    valore_ritorno = valore_iniziale;
  }
}


void function LeggiStringa(char valore_ritorno[10], const char *valore_iniziale) {
   char temp[10];

  // varie operazioni

  if (conferma) {
    strcpy(valore_ritorno, temp);
  } else {
    strcpy(valore_ritorno, valore_iniziale);
  }
}

il problema è che nonostante vari tentativi non sono riuscito a fare digerire al compilatore questa funzione... comunque mi tornano degli errori o delle warnings...

cercando in rete parlavano di allocazione dinamica della memoria... ma se possibile preferirei evitare...

qualcuno ha suggerimenti?

  1. L'allocazione dinamica serve se non hai uno spazio dichiarato a priori. Se la tua struct è in memoria e quindi anche nome è in memoria, allocazione dinamica non serve.

  2. Non esiste la parola function.

  3. nelle dichiarazioni dei parametri delle funzioni o usi i puntatori oppure le quadre per indicare un vettore ma... SENZA la dimensione. Proprio perchè al posto del vettore puoi mettere un puntatore e quindi non puoi dire la dimensione di quello a cui punti. Meglio un secondo parametro con la dimensione.
    Questo errore in compilazione:

void LeggiStringa(char valore_iniziale[10])

Questo è accettabile:

void LeggiStringa(char valore_iniziale[], int dimensione)
  1. meglio la terza con i strcpy. Ancora meglio è usare strncpy con un terzo parametro a cui devi dire quanti sono al massimo i caratteri da copiare.
    Ricorda poi che nei caratteri ne sprechi uno per il carattere di fine stringa '\0' e strlen(), strcpy() etc. vogliono stringhe C classiche terminate da quel carattere speciale. Se vuoi 10 caratteri devi dare dimensione 11

nid69ita:
2. Non esiste la parola function.

hai ragione... ho mescolato 2 linguaggi diversi...

grazie mille per i chiarimenti