Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [C] scanf e crash

  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698

    [C] scanf e crash

    come e' possibile, dico io, che di due blocchi di codice IDENTICI, uno funziona e un altro mi fa crashare l'applicazione...

    if (choice==1) {

    do {
    printf("\nnome (max %d caratteri): ",MAX_NAME_SIZE);
    scanf("%s",p1);
    len=strlen(p1);
    }while(len>MAX_NAME_SIZE);
    do {
    printf("\nnome (max %d caratteri): ",MAX_NAME_SIZE);
    scanf("%s",p2);
    len=strlen(p2);
    }while(len>MAX_NAME_SIZE);


    }//end if
    il primo ciclo do while funziona.
    nel secondo, la scanf fa crashare tutto, mi appare la finestra di win "questa applicazione ha generato errori e verra chiusa blabla"

    le due stringhe sono dichiarate char *p1,*p2
    sono sotto win 2k
    tutto si compila correttamente


  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698
    nessuno ha idea di che cosa succede ?

  3. #3
    Utente di HTML.it L'avatar di Grunt
    Registrato dal
    Dec 2001
    Messaggi
    246
    Hai allocato la memoria per i puntatori?

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698
    ehm
    non l'ho mai fatto, e non ho mai avuto problemi
    che intendi?

  5. #5
    Utente di HTML.it L'avatar di Grunt
    Registrato dal
    Dec 2001
    Messaggi
    246
    Quando usi i puntatori bisogna per forza allocare la memoria, per il semplice fatto che un puntatore indica un indirizzo di memoria e non una locazione.
    Sei sempre stato fortunato se non hai avuto problemi.
    Comunque si fa così
    codice:
    define SIZE_T 256
    char *p1,*p2;
        p1=(char *)malloc(SIZE_T * sizeof(char));
        p2=(char *)malloc(SIZE_T * sizeof(char));
    
        if ((p1 == NULL) || (p2 == NULL))
        {
              print("\nErrore allocazione\n");
              exit(1);
        }
    In pratica allochi una stringa di 256 caratteri.

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698
    ok grazie, anche se la cosa mi confonde un po...
    cioe, utilizzo puntatori appunto perche NON so quanto spazio mi serve, senno usavo un array
    credevo se ne occupasse direttamente il compilatore di sta cosa

    cioe a quel punto facevo prima a dichiarare char p1[SIZE_t]...o no?

  7. #7
    devi allocare memoria per i puntatori (come ti ha detto Grunt)

    p.s. se il sistema non crasha alla prima scanf() è solamente
    per puro caso
    ...Terrible warlords, good warlords, and an english song

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.