pbe (Normal User)
Pro
Messaggi: 131
Iscritto: 24/05/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 |
#include <stdio.h> #include <string.h> int main() { FILE *f; char c[] = ""; char buffer[10]; printf("Inserisci un valore: "); scanf("%s",c); /* Open file for both reading and writing */ f = fopen("file.txt", "w+"); /* Write data to the file */ fwrite(c, strlen(c)+1, 1, f); /* Seek to the beginning of the file */ fseek(f, SEEK_SET, 0); /* Read and display data */ fread(buffer, strlen(c)+1, 1, f); printf("%s\n", buffer); fclose(f); return(0); }
|
Qual è il problema?
Ultima modifica effettuata da pbe il 27/10/2014 alle 19:49 |
|
nessuno (Normal User)
Guru^2
Messaggi: 6379
Iscritto: 03/01/2010
|
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à. |
|
TheDarkJuster (Member)
Guru^2
Messaggi: 1620
Iscritto: 27/09/2013
|
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 |
|
TheDarkJuster (Member)
Guru^2
Messaggi: 1620
Iscritto: 27/09/2013
|
Doppio post
Ultima modifica effettuata da TheDarkJuster il 27/10/2014 alle 22:27 |
|
()
Newbie
Messaggi:
Iscritto:
|
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.
|
|
pbe (Normal User)
Pro
Messaggi: 131
Iscritto: 24/05/2014
|
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? |
|
pbe (Normal User)
Pro
Messaggi: 131
Iscritto: 24/05/2014
|
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. |
|
nessuno (Normal User)
Guru^2
Messaggi: 6379
Iscritto: 03/01/2010
|
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à. |
|