Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Polestar 3 Performance, test drive: comodità e potenza possono convivere
Polestar 3 Performance, test drive: comodità e potenza possono convivere
Abbiamo passato diversi giorni alla guida di Polestar 3, usata in tutti i contesti. Come auto di tutti i giorni è comodissima, ma se si libera tutta la potenza è stupefacente
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026
In occasione del proprio Architecture Deep Dive 2025 Qualcomm ha mostrato in dettaglio l'architettura della propria prossima generazione di SoC destinati ai notebook Windows for ARM di prossima generazione. Snapdragon X2 Elite si candida, con sistemi in commercio nella prima metà del 2026, a portare nuove soluzioni nel mondo dei notebook sottili con grande autonomia
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
DJI Mini 5 Pro porta nella serie Mini il primo sensore CMOS da 1 pollice, unendo qualità d'immagine professionale alla portabilità estrema tipica di tutti i prodotti della famiglia. È un drone C0, quindi in un peso estremamente contenuto e che non richiede patentino, propone un gimbal rotabile a 225 gradi, rilevamento ostacoli anche notturno e autonomia fino a 36 minuti. Caratteristiche che rendono il nuovo drone un riferimento per creator e appassionati
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 27-08-2003, 12: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, 14: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, 14: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, 14: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, 15: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, 16: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, 16: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, 21: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, 22: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, 23: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, 23: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, 08: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, 10: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 11:00.
x110 è offline   Rispondi citando il messaggio o parte di esso
Old 28-08-2003, 10: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, 11: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, 11: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, 13: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, 16: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, 18: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


Polestar 3 Performance, test drive: comodità e potenza possono convivere Polestar 3 Performance, test drive: comodit&agra...
Qualcomm Snapdragon X2 Elite: l'architettura del SoC per i notebook del 2026 Qualcomm Snapdragon X2 Elite: l'architettura del...
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice Recensione DJI Mini 5 Pro: il drone C0 ultra-leg...
ASUS Expertbook PM3: il notebook robusto per le aziende ASUS Expertbook PM3: il notebook robusto per le ...
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo Test ride con Gowow Ori: elettrico e off-road va...
Grazie a VLT è stata misurata dir...
Blue Origin annuncia un aerofreno ripieg...
Blue Origin annuncia una nuova versione ...
LG UltraFine evo 6K: il primo monitor al...
DJI cambia direzione: investe in Elegoo ...
Black Friday Narwal 2025: risparmi da ca...
Phishing evoluto contro Apple ID: caso f...
Prestazioni in discesa nei giochi? NVIDI...
Addio ai banner dei cookie? L'UE spinge ...
Le offerte Black Friday per gli smartpho...
Il controllo qualità degli iPhone...
Qualcomm Snapdragon X Elite vola con il ...
A2RL Season 2: storia, innovazione e sor...
Core Ultra Series 3: Intel conferma l'ev...
Black Friday Amazon: la GeForce RTX 5070...
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: 07:33.


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