Oppure

Loading
01/12/11 7:56
peppo
Ciao, eccomi di nuovo con un'altra domanda:
devo verificare le estensioni di alcuni file, la mia idea è stata creo un vettore
chiamato estensioni [ nrEstensioni] ove metto i valori che mi aspetto.
creo un vettore tmp dove metto l'estensione del file, e confronto.
Il problema è il seguente: il primo valore del vettore estensioni è il contenuto di una printf() :noway: . Mi spiego meglio, per dare feedback all'utente mostro delle cose su schermo, per qualche motivo una parte di queste cose mi va a finire nella prima ( e solo nella prima) cella del vettore estensioni.

questa è la funzione:

int verificaEstensione( char *nomeFile, int tipo )
{
/*questa variabile contiene le possibili combinazioni di estensioni ( statiche ==> modalità NON interattiva) */
    char *estensioni[nrEstensioni] = {"CAB", "sec", "cab","CAB","CAB"};
//    char *estensioni[nrEstensioni] = {"sec", "cab", "CAB","CAB"};

/* NOTE: mantenerlo così o metterlo in define */
    char tmp[ 3 ] ;

    int i = 0;                      // indice generico
    int corrispondenze = 0;             
// indica il numero di corrispondenze con le estensioni se > 0 è ok

    printf("\n      VERIFICA ESTENSIONE FILE          \n");

/* estensione su tre caratteri, parto dalla fine del nome e verifico estensione */
    printf("\nVerifico estensione di %s", nomeFile);
//    printf("\n strlen Estensione: %d", strlen(nomeFile));
    for ( i = strlen(nomeFile) -3 ; i < strlen(nomeFile ) ; i ++ )
    {
        tmp[i - (strlen(nomeFile) -3) ] = nomeFile[ i ];
    }

    for ( i = 0 ; i< nrEstensioni; i++)
        printf("\neste [i] %s",estensioni[i]);

    tmp[ 3 ] = 'Ciao, eccomi di nuovo con un'altra domanda: 

devo verificare le estensioni di alcuni file, la mia idea è stata creo un vettore
chiamato estensioni [ nrEstensioni] ove metto i valori che mi aspetto.
creo un vettore tmp dove metto l'estensione del file, e confronto.
Il problema è il seguente: il primo valore del vettore estensioni è il contenuto di una printf() :noway: . Mi spiego meglio, per dare feedback all'utente mostro delle cose su schermo, per qualche motivo una parte di queste cose mi va a finire nella prima ( e solo nella prima) cella del vettore estensioni.

questa è la funzione:

int verificaEstensione( char *nomeFile, int tipo )
{
/*questa variabile contiene le possibili combinazioni di estensioni ( statiche ==> modalità NON interattiva) */
    char *estensioni[nrEstensioni] = {"CAB", "sec", "cab","CAB","CAB"};
//    char *estensioni[nrEstensioni] = {"sec", "cab", "CAB","CAB"};

/* NOTE: mantenerlo così o metterlo in define */
    char tmp[ 3 ] ;

    int i = 0;                      // indice generico
    int corrispondenze = 0;             
// indica il numero di corrispondenze con le estensioni se > 0 è ok

    printf("\n      VERIFICA ESTENSIONE FILE          \n");

/* estensione su tre caratteri, parto dalla fine del nome e verifico estensione */
    printf("\nVerifico estensione di %s", nomeFile);
//    printf("\n strlen Estensione: %d", strlen(nomeFile));
    for ( i = strlen(nomeFile) -3 ; i < strlen(nomeFile ) ; i ++ )
    {
        tmp[i - (strlen(nomeFile) -3) ] = nomeFile[ i ];
    }

    for ( i = 0 ; i< nrEstensioni; i++)
        printf("\neste [i] %s",estensioni[i]);

    tmp[ 3 ] = '{parsed_message}';

/* verifico estensione */
    printf("\nEstensioni[ %d ] %s",tipo, estensioni[ tipo +1]);
    if(strncmp(estensioni[ tipo + 1  ], tmp, 3) == 0 )
    {
        corrispondenze ++;
    }
//    printf("\nNr corrispondenze estensioni: %d", corrispondenze);

    if ( corrispondenze == 0)
    {
        printf("\nERRORE: estensione file %s non corretta\n", nomeFile);
        return 0;
    }

    return 1;
}



magari scrivo in qualche parte della memoria dove non dovrei?
Grazie,'; /* verifico estensione */ printf("\nEstensioni[ %d ] %s",tipo, estensioni[ tipo +1]); if(strncmp(estensioni[ tipo + 1 ], tmp, 3) == 0 ) { corrispondenze ++; } // printf("\nNr corrispondenze estensioni: %d", corrispondenze); if ( corrispondenze == 0) { printf("\nERRORE: estensione file %s non corretta\n", nomeFile); return 0; } return 1; }


magari scrivo in qualche parte della memoria dove non dovrei?
Grazie,
aaa
01/12/11 10:06
nessuno
Deve essere

char tmp[ 4 ] ;

altrimenti scrivi oltre la fine del vettore tmp
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.