Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2012
    Messaggi
    13

    [C] Stack around variable was corrupted

    Salve
    ho fatto questo semplice codice per scrivere dei dati dentro ad un file

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct {
    	char nome[30], indirizzo[40], telefono[10];
    } dett;
    
    int main() {
    	FILE *fp;
    	dett dati;
    	char risp = 's';
    
    	if ((fp = fopen("C://clienti.txt", "a")) == NULL) {
    		fprintf(stderr, "Impossibile aprire il file\n");
    		exit(1);
    	}
    
    	do {
    		printf("Nome Cognome Telefono: ");
    		scanf("%s %s %s", dati.nome, dati.indirizzo, dati.telefono);
    
    		fprintf(fp, "%-30s%-40s%-10s\n", dati.nome, dati.indirizzo, dati.telefono);
    
    		printf("Vuoi inserire un altro record? (s/n): ");
    		scanf("%1s", &risp);
    	} while (risp == 's');
    	
    	fclose(fp);
    }
    Ma mi continua a dare sto maledetto errore

    codice:
    Run-Time Check Failure #2 - Stack around the variable 'risp' was corrupted.
    WHY?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Perché risp non è gestita correttamente ... non deve essere un char se la tratti in input come stringa. Quindi

    codice:
    char risp[] = "s";
    e poi

    codice:
    		scanf("%1s", risp);
    	} while (risp[0] == 's');
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2012
    Messaggi
    13
    ah ok, grazie mille...
    Nel frattempo avevo risolto usandola appunto come char e non come stringa facendo così:

    codice:
    		printf("Vuoi inserire un altro record? (s/n): ");
    		fflush(stdin);
    		scanf("%1c", &risp);
    	
    	} while (risp == 's');

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    E funziona ... ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2012
    Messaggi
    13
    Si si così funziona... L'fflush l'ho messo perchè rimaneva qualcosa nel buffer e senza quello il programma si chiudeva senza chiedere la s o la n...

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Ah ... ecco ... con fflush funziona ... senza, hai problemi ...

    Ma la fflush di stdin non è standard e non funzionerebbe ovunque ...

    Usa un ciclo while con una getchar ... (vedi altri thread in questo forum).
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2012
    Messaggi
    13
    Ah ok, ho capito cosa intendi per il getchar, ma come mai non funzionerebbe ovunque?

    E questo codice per la lettura come mai mi da sempre un errore come prima nonostante funzioni?

    codice:
    int main() {
    	FILE *fp;
    
    	if ((fp=fopen("C://clienti.txt", "r")) == NULL) {
    		fprintf(stderr, "Errore nell'apertura del file\n");
    		exit(1);
    	}
    	dett cliente;
    
    	printf("Nome\t\tCognome\t\tCellulare\n");
    	while(fscanf(fp, "%s %s %s\n",  cliente.nome, cliente.indirizzo, cliente.telefono)>0) {
    		printf("%s\t\t\t%s\t\t\t%s\n", cliente.nome, cliente.indirizzo,cliente.telefono); 
    	}
    	fclose(fp);
    	getchar();
    	getchar();
    }

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2012
    Messaggi
    13
    Up... Nessuno per l'ultimo codice qui su?

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Non ti ha risposto nessuno perché non hai detto di quale errore si tratta ...

    E poi il forum non va usato come una chat. Per un nuovo problema un nuovo thread.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2012
    Messaggi
    13
    Originariamente inviato da oregon
    Non ti ha risposto nessuno perché non hai detto di quale errore si tratta ...

    E poi il forum non va usato come una chat. Per un nuovo problema un nuovo thread.
    Avendo scritto che mi dava un errore come prima sottointendevo che l'errore fosse uguale a quello che mi dava nel post iniziale... Cmq a questo punto chiudete e apro un nuovo topic...

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 © 2024 vBulletin Solutions, Inc. All rights reserved.