Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [C] problema stringhe

    ragazzi mi sto dannando la vita.....
    in un programma semplice come questo non riesco a capire come mai io dichiaro una stringa di 3 caratteri e poi se ne inserisco una ad es. di 50 caratteri me l'acquisisce e me la stampa senza problemi......

    cosa sbaglio???????

    codice:
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    int main ()
    {
        char stringa[3];
        
        printf ("Ins. stringa: ");
        gets (stringa);
        
        printf ("%s\n\n\n", stringa);
        
        system ("pause");
    }

  2. #2
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Alcuni compilatori ti danno proprio un warning: "This program uses gets, which is unsafe".
    Invece se usi fgets puoi limitare il numero di caratteri inserito.
    gets invece scrive anche in porzioni di memoria non allocate.
    codice:
    fgets(stringa,3,stdin);
    In questo caso anche se inserisci 100 caratteri te ne prende solo 3, gli altri li ignora.

  3. #3
    a qst punto la domanda nasce spontanea.....ho qst programma....come mai quando vado a fare le strncopy mi copia i caratteri che voglio e poi mi assegna valori arbitrari???


    codice:
    
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    
    int altriCodici (char codice[], char sede[], char prodotto[], char caratteristiche[]);
    int numero (char alfa);
    
    
    int main ()
    {
        char stringa[24], codice[8], sede[4], prodotto[8], caratteristiche[4];
        
        printf ("\n Inserisci codice: ");
        scanf ("%s", stringa);
       
            
        strncpy (codice, stringa, 8);
        
        
        strncpy (prodotto, &stringa[8], 8);
       
        
        strncpy (sede, &stringa[16], 4);
        
        
        strncpy (caratteristiche, &stringa[20], 4);
         
        
         printf ("\n codice: %s", codice);
         printf ("\n prodotto: %s", prodotto);
         printf ("\n sede: %s", sede);
         printf ("\n caratt: %s", caratteristiche);
         
             
        printf ("\n risulatato: %d", altriCodici(codice, sede, prodotto, caratteristiche));
        
    
    
        printf ("\n\n\n---\n");
        system ("pause");
    }
    
    
    
    int altriCodici (char codice[], char sede[], char prodotto[], char caratteristiche[])
    {
        int lunghezza, i;
        
        i=strlen(sede);
        while (numero(codice[i]))
              ++i;
              
        strncpy (prodotto, &codice[strlen(sede)], i-strlen(sede));
        
        
        if(strlen(prodotto)>8)
              return -1;
        
        lunghezza=strlen(codice)-(strlen(sede)+strlen(prodotto));
        
        if (lunghezza == 0)
              return 0;
        
        strncpy (caratteristiche,  &codice[i], lunghezza);
        
        if (strlen(caratteristiche) > 8)
              return -2;
        else
              return 1;
    }
    
    
    
    int numero (char alfa)
    {
        if ((alfa >= '0') && (alfa <= '9'))
           return 1;
        else
           return 0;
    }

  4. #4
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Una cosa che noto è che non inserisci i terminatori.
    Ma in che senso ti assegna valori arbitrari,qual'è l' output che ottieni ?

  5. #5
    ottengo qst! anche se nn capisco che senso ha!!!

    anche se inserisco i terminatori nn funge!!

    https://www.dropbox.com/s/9ktutxdwhep23j5/Immagine.jpg

  6. #6
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    E' chiaro che il problema sta nel fatto che non hai inserito i terminatori, se hai una stringa che dovrebbe essere: "12345678" e te la stampa più lunga, è perchè la printf non sa quando fermarsi a stampare.Se c' era il terminatore come nono elemento era impossibile che ti stampava una stringa più lunga.
    Prova questo:
    codice:
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    
    int altriCodici (char codice[], char sede[], char prodotto[], char caratteristiche[]);
    int numero (char alfa);
    
    
    int main ()
    {
        char stringa[24], codice[9], sede[5], prodotto[9], caratteristiche[5];
        
        printf ("\n Inserisci codice: ");
        scanf ("%s", stringa);
       
            
        strncpy (codice, stringa, 8);
        
        
        strncpy (prodotto, &stringa[8], 8);
       
        
        strncpy (sede, &stringa[16], 4);
        
        
        strncpy (caratteristiche, &stringa[20], 4);
        codice[8]=0;
        prodotto[8]=0;
        sede[4]=0;
        caratteristiche[4]=0;
        
         printf ("\n codice: %s", codice);
         printf ("\n prodotto: %s", prodotto);
         printf ("\n sede: %s", sede);
         printf ("\n caratt: %s", caratteristiche);
         
             
        printf ("\n risulatato: %d", altriCodici(codice, sede, prodotto, caratteristiche));
        
    
    
        printf ("\n\n\n---\n");
        system ("pause");
    }

  7. #7
    ok, grazie....così sembra che la prima parte vada......
    ma poi il resto si blocca........

    codice:
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    
    int altriCodici (char codice[], char sede[], char prodotto[], char caratteristiche[]);
    int numero (char alfa);
    
    
    int main ()
    {
             char stringa[24], codice[9], sede[5], prodotto[9], caratteristiche[5];
    
             printf ("\n Inserisci codice: ");
             scanf ("%s", stringa);
    
             strncpy (codice, stringa, 8);
             strncpy (prodotto, &stringa[8], 8);
             strncpy (sede, &stringa[16], 4);
             strncpy (caratteristiche, &stringa[20], 4);
             
             codice[8]=0;
             prodotto[8]=0;
             sede[4]=0;
             caratteristiche[4]=0;
    
             printf ("\n codice: %s", codice);
             printf ("\n prodotto: %s", prodotto);
             printf ("\n sede: %s", sede);
             printf ("\n caratt: %s", caratteristiche);
    
             printf ("\n risulatato: %d", altriCodici(codice, sede, prodotto, caratteristiche));
    
             printf ("\n\n\n---\n");
             system ("pause");
    }
    
    
    
    int altriCodici (char codice[], char sede[], char prodotto[], char caratteristiche[])
    {
        int lunghezza, i;
        
        i=strlen(sede);
        while (numero(codice[i]))
              ++i;
              
        strncpy (prodotto, &codice[strlen(sede)], i-strlen(sede));
        
        
        if(strlen(prodotto)>8)
              return -1;
        
        lunghezza=strlen(codice)-(strlen(sede)+strlen(prodotto));
        
        if (lunghezza == 0)
              return 0;
        
        strncpy (caratteristiche,  &codice[i], lunghezza);
        
        if (strlen(caratteristiche) > 8)
              return -2;
        else
              return 1;
    }
    
    
    
    int numero (char alfa)
    {
        if ((alfa >= '0') && (alfa <= '9'))
           return 1;
        else
           return 0;
    }

  8. #8
    qst è la traccia dell'esercizio!!!
    qualke beato ke mi aiuti!!!


    https://www.dropbox.com/s/50cnjzbgwpivyrc/IMG_0109.JPG

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.