Ecco le modifiche
Ho tenuto i printf come sorta di debug per il momento, appena ho la versione finale li leverò
per le fprintf(stderr) credo che alla fine le devierò in un file.log
#include <stdio.h>
#include <string.h>
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 dI = 0; /* Dimensione stringa da '\\' */
size_t dF = 0; /* Dimensione stringa da '.' */
/* ===================================================================== */
/* Controllo Input */
if( NULL == pathProg ) {
fprintf( stderr , "%s" , "Input path non valido!\n" );
return 0;
}
if( 1 > maxDim ) {
fprintf( stderr , "%s" , "Input path non valido!\n" );
return 0;
}
printf( "Path Programma = %s\n" , pathProg );
/* Occorenza ultimo '\' */
ptrStart = strrchr( pathProg , start );
if( NULL == ptrStart ) {
fprintf( stderr , "Carattere \" %c \" non trovato\n" , start );
/* Se la stringa non è un path copia tutta la stringa di input*/
strncpy( nomeProg , pathProg , ( maxDim - 1 ) );
nomeProg[maxDim - 1] = '\0';
return strlen( nomeProg );
}
/* passo avanti perchè non mi interessa partire dal carattere dopo il '\' */
ptrStart++;
/* Occorenza ultimo '.' per l'estensione */
ptrClose = strrchr( pathProg , close );
if( NULL == ptrStart ) {
fprintf( stderr , "Carattere \" %c \" non trovato\n" , close );
return 0;
}
/* Dimensione stringa con estensione */
dI = strlen( ptrStart );
if( !dI ) {
fprintf( stderr , "Dimensione stringa con estensione non corretta \n" );
return 0;
}
/* Dimensione estensione */
dF = strlen( ptrClose );
if( !dF ) {
fprintf( stderr , "Dimensione estensione stringa non corretta \n" );
return 0;
}
if( ( strlen( ptrStart ) - dF ) > maxDim - 1 )
{
fprintf( stderr , "%s%s" , "La dimensione del nome del programma eccede " ,
"la dimensione massima consentita\n" );
}
/* Copia in nomeProg la parte di path dal puntatore ptrStart */
strncpy( nomeProg , ptrStart , maxDim );
printf( "\n\n\nNome Programma con estensione: %s\n" , nomeProg );
/* "riduco" la stringa del valore della dimensione di punto ed estensione */
nomeProg[dI - dF] = '\0';
printf( "Nome Programma senza estensione: %s\n" , nomeProg );
return strlen( nomeProg );
}
int main( int argc , char *argv[] )
{
char stringa[40] = "" ;
int dim = 0;
dim = estraiNomeFile( argv[0] , stringa , 40 );
puts( "" );
printf( "Nome Programma = %s\n" , stringa );
printf( "dimensione nome Programma = %d\n" , dim );
return 0;
}