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++ - Salvare dati
Forum - C/C++ - Salvare dati - Pagina 2

Pagine: [ 1 2 3 4 ] Precedente | Prossimo
Avatar
pbe (Normal User)
Pro


Messaggi: 131
Iscritto: 24/05/2014

Segnala al moderatore
Postato alle 19:48
Lunedì, 27/10/2014
Ho provato a realizzare dall'esempio a http://www.tutorialspoint.com/c_standard_library/c_functio ... un programma che legge un valore (anche char), lo salva e lo stampa. Funziona in parte in quanto se inserisco per esempio "casa" stampa cHLUu: la prima lettera è sempre giusta ma poi aggiunge quei caratteri là... anche se inserisco solo "c" o anche coi numeri. Inoltre il salvataggio funziona ma con i caratteri descritti sopra...

Il codice modificato da me è:
Codice sorgente - presumibilmente Delphi

  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main()
  5. {
  6.    FILE *f;
  7.    char c[] = "";
  8.    char buffer[10];
  9.  
  10.    printf("Inserisci un valore: ");
  11.    scanf("%s",c);
  12.    
  13.    /* Open file for both reading and writing */
  14.    f = fopen("file.txt", "w+");
  15.  
  16.    /* Write data to the file */
  17.    fwrite(c, strlen(c)+1, 1, f);
  18.  
  19.    /* Seek to the beginning of the file */
  20.    fseek(f, SEEK_SET, 0);
  21.  
  22.    /* Read and display data */
  23.    fread(buffer, strlen(c)+1, 1, f);
  24.    printf("%s\n", buffer);
  25.    fclose(f);
  26.    
  27.    return(0);
  28. }



Qual è il problema?

Ultima modifica effettuata da pbe il 27/10/2014 alle 19:49
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6379
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 20:02
Lunedì, 27/10/2014
Questo

char c[] = "";

significa che l'array c è vuoto.

E rimarrà vuoto. Non puoi utilizzarlo nella scanf perché scriverai in memoria sporcandola e ottenendo risultati imprevedibili. Il vettore deve avere una dimensione.

Ultima modifica effettuata da nessuno il 27/10/2014 alle 20:03


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 Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 22:02
Lunedì, 27/10/2014
Nel fwrite hai invertiti il secondo e il terzo parametro, Pensaci bene e vai a vendere gli esempi precedenti

Ultima modifica effettuata da TheDarkJuster il 27/10/2014 alle 22:03
PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 22:04
Lunedì, 27/10/2014
Doppio post

Ultima modifica effettuata da TheDarkJuster il 27/10/2014 alle 22:27
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 22:32
Lunedì, 27/10/2014
L'espressione char c[] = ""; indica un array costituito da un solo elemento di tipo char, il che spiega perché quando "stampi" c ottieni sempre il primo carattere valido del tuo input (correttamente immagazzinato nell'array) seguito da una serie di dati "sporchi". Ti va già bene se "scrivendo" quei dati "sporchi" il programma non va in palla, perché potrebbe anche succedere perché scrive chissà cosa chissà dove.

PM Quote
Avatar
pbe (Normal User)
Pro


Messaggi: 131
Iscritto: 24/05/2014

Segnala al moderatore
Postato alle 23:01
Lunedì, 27/10/2014
Testo quotato

Postato originariamente da AldoBaldo:

L'espressione char c[] = ""; indica un array costituito da un solo elemento di tipo char, il che spiega perché quando "stampi" c ottieni sempre il primo carattere valido del tuo input (correttamente immagazzinato nell'array) seguito da una serie di dati "sporchi". Ti va già bene se "scrivendo" quei dati "sporchi" il programma non va in palla, perché potrebbe anche succedere perché scrive chissà cosa chissà dove.



Quindi cosa posso fare?

PM Quote
Avatar
pbe (Normal User)
Pro


Messaggi: 131
Iscritto: 24/05/2014

Segnala al moderatore
Postato alle 23:03
Lunedì, 27/10/2014
Testo quotato

Postato originariamente da TheDarkJuster:

Nel fwrite hai invertiti il secondo e il terzo parametro, Pensaci bene e vai a vendere gli esempi precedenti



Il risultato non cambia se li inverto.

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6379
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 23:06
Lunedì, 27/10/2014
Basta dimensionare c, ovvero

char c[10];


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 Quote
Pagine: [ 1 2 3 4 ] Precedente | Prossimo