Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 27-08-2003, 11:48   #1
x110
Senior Member
 
Iscritto dal: May 2002
Città: Massa Carrara
Messaggi: 589
c -- sono scemo?

non mi scrive la struttura... perche'?
anzi mi scrive This buffer contains 34 charactersd

struct STRU{
int x;
char my;
char z;
};
#include <stdio.h>

int main ()
{
FILE * pFile;
struct STRU mys;
mys.x =100;
mys.my='a';
mys.z ='c';
char buffer[] = "This buffer contains 34 characters";
pFile = fopen ("myfile.txt" , "w+b");
fwrite (buffer , 1 , 34 , pFile);
fwrite (&mys , 1, sizeof(mys) , pFile);

fclose (pFile);
return 0;
}
x110 è offline   Rispondi citando il messaggio o parte di esso
Old 27-08-2003, 13:20   #2
asdalo
Junior Member
 
L'Avatar di asdalo
 
Iscritto dal: Aug 2003
Città: Firenze
Messaggi: 9
mmm a parte che non ho capito bene quale è lo scopo.. quindi potrei dire ca@@ate

nel tuo codice esegui due fwrite, la prima :

fwrite (buffer , 1 , 34 , pFile);

scrive esattamente il contenuto di buffer, cioè "This buffer contains 34 characters"

la seconda

fwrite (&mys , 1, sizeof(mys) , pFile);

scrive nel file la struttura mys.

Per farti un esempio, mys.x che tu imposti a 100 corrisponde infatti alla "d", quel carattere che vedi in fondo:

This buffer contains 34 charactersd

quindi... funziona, ammesso che dovesse fare questo :P
asdalo è offline   Rispondi citando il messaggio o parte di esso
Old 27-08-2003, 13:26   #3
x110
Senior Member
 
Iscritto dal: May 2002
Città: Massa Carrara
Messaggi: 589
ok ma mi dovrebbe scrivere anche la 'a' e l'altra lettera.
vengo dal vb e gia' qua si spiega tutto,
vorrei scrivere delle strutture miste a stringhe riposizionandomi con fseek,
ma non ci riesco e non capisco perche'.
grazie
x110 è offline   Rispondi citando il messaggio o parte di esso
Old 27-08-2003, 13:49   #4
asdalo
Junior Member
 
L'Avatar di asdalo
 
Iscritto dal: Aug 2003
Città: Firenze
Messaggi: 9
Aprendo il file con un editor esadecimale vedo che ci è stato scritto una cosa così:

This buffer contains 34 charactersd ac

Ricordati che stai scrivendo strutture con tipi misti, quindi non lo puoi leggere sempre correttamente con editor di testo

Se vuoi fare una verifica veloce, scrivi solo la struttura e poi con una fread rileggila, vedrai che è tutto ok

Probabilmente è solo un problema di visualizzazione di notepad, o del progamma che stai usando, prova ad usare un editor esadecimale e vedrai carattere per carattere cosa c'è nel file
asdalo è offline   Rispondi citando il messaggio o parte di esso
Old 27-08-2003, 14:51   #5
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Oppure scrivi con w+t e vedrai che i dati vengono scritti correttamente...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 27-08-2003, 15:03   #6
x110
Senior Member
 
Iscritto dal: May 2002
Città: Massa Carrara
Messaggi: 589
hai propio ragione, e' colpa di kwrite.
ero abituado ad usare notepad che qualcosa scrive.

ciao cionci. il t e' testo e mi crea qualche problema,,in quanto dovrebbe scrivere il il valore 100 come "100" 3 byte se e' cosi' preferisco lasciar perdere.

comunque grazie
x110 è offline   Rispondi citando il messaggio o parte di esso
Old 27-08-2003, 15:07   #7
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Te lo consigliavo solo per vedere che scriveva tutto... Il testo lo leggi meglio
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 27-08-2003, 20:41   #8
x110
Senior Member
 
Iscritto dal: May 2002
Città: Massa Carrara
Messaggi: 589
no no son propio scemo.....

cioe' non capisco perche' la struttura e' lunga 8 e i singoli campi valgono 6.
int 4
char 1
char 1

in piu' al secondo perror mi dice illegal seek. perche'????

struct STRU{
char my;
char z;
int x;
};
#include <stdio.h>

int main ()
{
FILE * pFile;
int *pstru;
int w;
struct STRU mys;
pstru=mys.my;
mys.my='a';
mys.x =100;
mys.z ='c';
char buffer[] = "This buffer contains 34 characters";
pFile = fopen ("/myfile.txt" , "w+b");
fwrite (buffer , 1 , 34 , pFile);
perror("ciao1");
w=fwrite (&mys , 1,sizeof(mys),pFile);
perror("ciao2");
printf("sizeof(mys)= %d \nsizeof(mys.my)= %d \nsizeof(mys.z)= %d \nsizeof(mys.x)= %d\nw = %d\n",sizeof(mys),sizeof(mys.my),sizeof(mys.z),sizeof(mys.x),w);
fclose (pFile);
return 0;
}


questo e' l'output

ciao1: Success
ciao2 Illegal seek
sizeof(mys)=8
sizeof(mys.my)=1
sizeof(mys.z)=1
sizeof(mys.x)=4
w=8
x110 è offline   Rispondi citando il messaggio o parte di esso
Old 27-08-2003, 21:46   #9
bsummer
Senior Member
 
L'Avatar di bsummer
 
Iscritto dal: Oct 2002
Messaggi: 487
Mi sembra di ricordare che il tipo char è a 16 bit.

Ad esempio quando scrivi

char a;

a='\n';

Quel '\n" ti dice che la stringa è finita e di andare a capo, cioè è formato da due codici ascii, rispettivamente il 13 (carriage return) e il 10 (line feed).
Questo sotto windows/dos, perchè sotto linux c'è solo il 13 (mi pare).

Ma la mia memoria non è più quella di una volta quindi ci vuole qualcuno che confermi/smentisca.

Certo che se è come ricordo io, allora la questione del size torna che è un piacere (int 4 + char 2 + char 2 = 8 byte)

Aloha!
bsummer è offline   Rispondi citando il messaggio o parte di esso
Old 27-08-2003, 22:37   #10
x110
Senior Member
 
Iscritto dal: May 2002
Città: Massa Carrara
Messaggi: 589
ok pero' sizeof(char)restituisce 1 e non 2.
non so dovrei controllare con il famose editor esadecimale
x110 è offline   Rispondi citando il messaggio o parte di esso
Old 27-08-2003, 22:46   #11
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
Quote:
Originariamente inviato da bsummer
Mi sembra di ricordare che il tipo char è a 16 bit.

Ad esempio quando scrivi

char a;

a='\n';

Quel '\n" ti dice che la stringa è finita e di andare a capo, cioè è formato da due codici ascii, rispettivamente il 13 (carriage return) e il 10 (line feed).
Questo sotto windows/dos, perchè sotto linux c'è solo il 13 (mi pare).

Ma la mia memoria non è più quella di una volta quindi ci vuole qualcuno che confermi/smentisca.

Certo che se è come ricordo io, allora la questione del size torna che è un piacere (int 4 + char 2 + char 2 = 8 byte)

Aloha!

Char non è a 8bit ? Mi sembra possa essere usato anke per interi dal -128 a 127 (ovvero 256 di range massimo che è un numero a 8 bit )

Ciao
__________________
GPU Compiler Engineer
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 28-08-2003, 07:30   #12
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
La somma dei vari campi è 6 byte...

4 byte per l'int e 1 byte per ogni char...
sizeof(mys) potrebbe anche essere giusto 8...infatti quando si va ad operare su una struttura si preferisce effettuare un allineamento ai 16 bit...

Accedere singolarmente ad un campo di memoria dispari è un'operazione storicamente poco agevole per le CPU x86... Per questo i compilatori effettuano un allineamento delle strutture ai 16 bit...

Probabilmente la struttura in memoria sarà memoriazzata in questo modo:
Codice:
31------23------15------7-------0
|  pad  |   z   |  pad  |  my   |
|             x 4 byte          |
31------23------15------7-------0
I campi che ho chiamato pad sono stati apunto inseriti per allineare i campi lunghi un byte ai 16 bit...
E questo dovrebbe avvenire per tutti i campi di lunghezza dispari (questa ottimizzazione mi sembra che si possa disabilitare dalle opzionid el compilatore)...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 28-08-2003, 09:53   #13
x110
Senior Member
 
Iscritto dal: May 2002
Città: Massa Carrara
Messaggi: 589
cionci sei grande.
quando parli hai la soluzione.
infatto l'ho provato a compilare in windows con un'altro compilatore e non e' successo.
per tua informativa, sappi che pero' i pad mi sono stati aggiunti alla fine del file.
(61)=a (63)=c ( 04 08 64 00)=100 (00 00)=pad
sai mica qual'e' impostazione per il compilatore?
perche' sto usando kdevelop e l'unica impostazione che e' settata e' wall

in piu' perche mi dice illegal seek sulla seconda write?

ciao

Ultima modifica di x110 : 28-08-2003 alle 10:00.
x110 è offline   Rispondi citando il messaggio o parte di esso
Old 28-08-2003, 09:59   #14
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Sì ? Allora allinea direttamente la struttura ai 32 bit...
No, mi dispiace... Non me lo ricordo...

Prova a compilare con l'impostazione -O0 (O come Otranto Zero)...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 28-08-2003, 10:03   #15
x110
Senior Member
 
Iscritto dal: May 2002
Città: Massa Carrara
Messaggi: 589
ho modificato il messaggio ma tu avevi gia' risposto.....
x110 è offline   Rispondi citando il messaggio o parte di esso
Old 28-08-2003, 10:07   #16
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Così leggendo il codice non ho idea perchè ti dia illegal seek...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 28-08-2003, 12:30   #17
bsummer
Senior Member
 
L'Avatar di bsummer
 
Iscritto dal: Oct 2002
Messaggi: 487
Quote:
Originariamente inviato da AnonimoVeneziano
Char non è a 8bit ? Mi sembra possa essere usato anke per interi dal -128 a 127 (ovvero 256 di range massimo che è un numero a 8 bit )

Ciao
Se size(char) di dà 1 allora chiaramente sto sbagliando io...

Tuttavia continuo a ricordare che c'è un linguaggio in cui il char è definito a 16 bit...appurato che C non è, pascal e Vb sono sicuro di no, cosa rimane? Boh... , ma visto che il problema è stato risolto alla fine non è importante

Aloha!
bsummer è offline   Rispondi citando il messaggio o parte di esso
Old 28-08-2003, 15:17   #18
x110
Senior Member
 
Iscritto dal: May 2002
Città: Massa Carrara
Messaggi: 589
in realta' c'e' acora qualche problema
rileggi per favore.

il vb quando si parla di stringe generalmente le indica come unicode e un carattere occupa 2 byte.
ciao......

grazie.
x110 è offline   Rispondi citando il messaggio o parte di esso
Old 28-08-2003, 17:17   #19
bsummer
Senior Member
 
L'Avatar di bsummer
 
Iscritto dal: Oct 2002
Messaggi: 487
Quote:
Originariamente inviato da x110
in realta' c'e' acora qualche problema
rileggi per favore.

il vb quando si parla di stringe generalmente le indica come unicode e un carattere occupa 2 byte.
ciao......

grazie.
Mi sono letto il discorso dell'unicode...ho imparato qualcosa
Per quanto riguarda l'altro problema, boh , guardando il codice non mi sembra ci siano errori...

Aloha!
bsummer è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
La prima missione orbitale del razzo spa...
Servizi in streaming sempre più c...
Anteprima della Leapmotor B03X: inizia l...
Anthropic accusa la Cina: Claude utilizz...
I satelliti Rassvet (Starlink russo) di ...
Un agente IA ha risolto un problema su W...
Cina: la CMSA potrebbe cambiare parte de...
68 mensilità di bonus per i dipen...
Rocket Lab ha fatto ricorso contro la de...
Nutanix rende disponibile Azure Virtual ...
Il padrino del deep learning avverte: gl...
Il finto avviso "iPhone Storage is Full"...
Dietrofront in Cina, addio touchscreen p...
Un piccolo accessorio trasforma lo smart...
Dopo 370 anni il Cyphral Distich non è p...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 06:18.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v