Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - errato valore in vettore
Forum - C/C++ - errato valore in vettore

Avatar
peppo (Normal User)
Newbie


Messaggi: 4
Iscritto: 25/11/2011

Segnala al moderatore
Postato alle 8:56
Giovedì, 01/12/2011
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:

Codice sorgente - presumibilmente C#

  1. int verificaEstensione( char *nomeFile, int tipo )
  2. {
  3. /*questa variabile contiene le possibili combinazioni di estensioni ( statiche ==> modalità NON interattiva) */
  4.     char *estensioni[nrEstensioni] = {"CAB", "sec", "cab","CAB","CAB"};
  5. //    char *estensioni[nrEstensioni] = {"sec", "cab", "CAB","CAB"};
  6.  
  7. /* NOTE: mantenerlo così o metterlo in define */
  8.     char tmp[ 3 ] ;
  9.  
  10.     int i = 0;                      // indice generico
  11.     int corrispondenze = 0;            
  12. // indica il numero di corrispondenze con le estensioni se > 0 è ok
  13.  
  14.     printf("\n      VERIFICA ESTENSIONE FILE          \n");
  15.  
  16. /* estensione su tre caratteri, parto dalla fine del nome e verifico estensione */
  17.     printf("\nVerifico estensione di %s", nomeFile);
  18. //    printf("\n strlen Estensione: %d", strlen(nomeFile));
  19.     for ( i = strlen(nomeFile) -3 ; i < strlen(nomeFile ) ; i ++ )
  20.     {
  21.         tmp[i - (strlen(nomeFile) -3) ] = nomeFile[ i ];
  22.     }
  23.  
  24.     for ( i = 0 ; i< nrEstensioni; i++)
  25.         printf("\neste [i] %s",estensioni[i]);
  26.  
  27.     tmp[ 3 ] = '\0';
  28.  
  29. /* verifico estensione */
  30.     printf("\nEstensioni[ %d ] %s",tipo, estensioni[ tipo +1]);
  31.     if(strncmp(estensioni[ tipo + 1  ], tmp, 3) == 0 )
  32.     {
  33.         corrispondenze ++;
  34.     }
  35. //    printf("\nNr corrispondenze estensioni: %d", corrispondenze);
  36.  
  37.     if ( corrispondenze == 0)
  38.     {
  39.         printf("\nERRORE: estensione file %s non corretta\n", nomeFile);
  40.         return 0;
  41.     }
  42.  
  43.     return 1;
  44. }



magari scrivo in qualche parte della memoria dove non dovrei?
Grazie,

PM
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6404
Iscritto: 03/01/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 11:06
Giovedì, 01/12/2011
Deve essere

char tmp[ 4 ] ;

altrimenti scrivi oltre la fine del vettore tmp

già, grazie - peppo - 21/12/11 15:16


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à.
PM