Ecco la versione aggiornata del programma
#include <stdio.h>
#include <string.h>
#define MAX_DIM_PATH (256)
int estraiNomeFile( char *pathProg , char *nomeProg , size_t maxDim )
{
/* ====================== DEFINIZIONE VARIABILI ======================= */
char *ptrStart = NULL ; /* Puntatore su carattere start */
char *ptrClose = NULL ; /* Puntatore su carattere start */
char start = '\\'; /* Precarattere iniziale nome */
char close = '.'; /* Postcarattere finale nome */
size_t dimStart = 0; /* Dimensione stringa da ptrStart */
size_t dimClose = 0; /* Dimensione Stringa da ptrClose */
size_t dimFinal = 0; /* Dimensione Finale Nome Programma*/
/* ===================================================================== */
/* Controllo Input */
if( NULL == pathProg || NULL == nomeProg || 1 > maxDim )
{
if( NULL == pathProg )
{
fprintf( stderr , "%s" , "Percorso non valido!\n" );
}
if( NULL == nomeProg )
{
fprintf( stderr , "%s" , "puntatore per nomeProgramma non valido!\n" );
}
if( 1 > maxDim )
{
fprintf( stderr , "%s" , "Input DIMENSIONE MASSIMA NOme Programma non valida!\n" );
}
return 0;
}
/* Occorenza ultimo '\' */
ptrStart = strrchr( pathProg , start );
if( NULL == ptrStart )
{
fprintf( stderr , "Carattere \" %c \" non trovato\n" , start );
} else
{
ptrStart++; /* Punta al cartattere dopo '\' */
dimStart = strlen( ptrStart );
}
/* Occorenza ultimo '.' per l'estensione */
ptrClose = strrchr( pathProg , close );
if( NULL == ptrStart )
{
fprintf( stderr , "Carattere \" %c \" non trovato\n" , close );
dimClose = 0;
} else
{
dimClose = strlen( ptrClose ) ;
}
dimFinal = (size_t)( ptrClose - ptrStart ) ;
if( maxDim > dimFinal )
{
strncpy( nomeProg , ptrStart , strlen( ptrStart ) );
nomeProg[dimFinal] = '\0';
} else
{
fprintf( stderr , "%s" , "La dimensione del some eccede la dimensione massima " );
strncpy( nomeProg , ptrStart , maxDim );
nomeProg[maxDim] = '\0';
}
return dimFinal ;
}
/* main con stringhe modificabili e non */
int main( int argc , char *argv[] )
{
char stringa[MAX_DIM_PATH] = "" ;
int dim = 0;
dim = estraiNomeFile( __FILE__ , stringa , MAX_DIM_PATH );
puts( "" );
printf( "Nome Programma = %s\n" , stringa );
printf( "Dimensione nome programma = %d\n" , dim );
dim = estraiNomeFile( argv[0] , stringa , MAX_DIM_PATH );
puts( "" );
printf( "Nome Programma = %s\n" , stringa );
printf( "Dimensione nome programma = %d\n" , dim );
return 0;
}