Prendendo spunto da una discussione nel forum, ho cercato di estrarre e scrivere sul display gli ultimi 4 caratteri del nome del file .ino, che contengono la versione. Dove ho sbagliato?
Un puntatore è solo una variabile che contiene un indirizzo, se io voglio salvare dati devo allocare memoria per il puntatore con malloc. In questo modo il puntatore
punta a un area di memoria dove io posso inserire i dati.
tuoi errori
char ver=" "; // ver è un carattere non è un array non posso assegnarli stringhe
char carattere=' ';
char *s =__FILE__; // Non so cosa sia FILE nel tuo codice manca
char *progName = strrchr(s, '\\');
for(int n=strlen(progName)-8; n<=strlen(progName)-4; n++)
{
carattere=progName[n];
ver+=carattere; //Non posso assegnare più carattere a una variabile char, se fosse un array
bisognerebbe usare la funzione strcpy o strcat.
}
ver
nomeFile è il puntatore al primo elemento, il primo carattere, gli sommo la lunghezza della stringa e punto all'ultimo carattere, tolgo 4 e punto al 4 carattere prima della fine stringa. Adesso il puntatore punta al primo carattere che voglio copiare.
3)Siccome le funzioni stringa lavorano col puntatore passato, si comportano allo stesso modo se passi il primo carattere, ovvero il nome del puntatore o array, ma si comportano allo stesso modo se gli passi il puntatore a un carattere intermedio. Partiranno da quel puntatore a carattere.
Con la prima creo l'array di caratteri
Con la seconda porto indietro il terminatore, per scartare la coda che non mi interessa
Con la terza porto avanti il puntatore, per scartare la testa, che non.mi interessa
Come era quella vecchia pubblicità della grappa (boccchino sigillo nero, se ricordo bene): via la testa, via la coda solo il cuore della grappa?
AmericanDreamer, il tuo codice è molto semplice, ma supponiamo che la lunghezza del nome sia 30 caratteri (comprende tutto il percorso del file):
s[26]=0
s=s+26?
No... Devo spostare il puntatore avanti di 23 elementi, cioè la stringa deve iniziare al ventitreesimo elemento dell'array.
AmericanDreamer, il tuo codice è molto semplice, ma supponiamo che la lunghezza del nome sia 30 caratteri (comprende tutto il percorso del file):
s[26]=0
s=s+26?
C1P8:
Di un ipotetico filename fatto così:
Nomefilealberto.ino
Tu vorresti che uscisse solo "erto", senza l'inizio e senza estensione.
Ho capito giusto?
Esatto: da un nome "Nomefilealberto_v0.1.ino"
deve uscire: "v0.1".