Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Samsung Micro RGB R95H, il primo LCD a LED rossi, verdi e blu di Samsung alla prova del banco di misura
Samsung Micro RGB R95H, il primo LCD a LED rossi, verdi e blu di Samsung alla prova del banco di misura
Il primo Micro RGB di Samsung per il salotto è il 65 pollici da 2.749 euro. Sul banco di misura abbiamo rilevato 2.000 nit di picco, nero assoluto con il local dimming e il 91,4% del BT.2020, il colore più ampio che abbiamo misurato su un LCD
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre
Apple ha rinnovato iPhone 18 Pro soprattutto dentro: chip A20 Pro a 2 nm con memoria affiancata al SoC, camera di vapore tre volte più ampia, Dynamic Island più piccola del 25% grazie a Face ID sotto il display e fotocamera principale con diaframma variabile da f/1.48 a f/4. Lo abbiamo misurato al colorimetro e nei benchmark, usato con iOS 27 e messo alla prova in fotografia tra laghi, borghi e interni poco illuminati
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34
A Londra, per il trentennale dei Toughbook, Panasonic ha presentato il tablet G3 e il 2-in-1 34. Con Jon Tucker, a capo dell'ingegneria europea, abbiamo parlato di ciò che non si vede: batterie, antenne, porte seriali e accorgimenti nati sul campo
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 18-11-2008, 19:22   #1
MrModd
Senior Member
 
L'Avatar di MrModd
 
Iscritto dal: Apr 2007
Messaggi: 924
[C++/C] Problemi nell'uso delle Winsock

Salve gente,
ho un problema che non riesco a risolvere...
sto usando su un programma fgetc() (della libreria standard del C) e send() (delle winsock).
C'è questo problema:
io dovrei prendere un carattere da un file con "variabile=fgetc(file);" e inviare il carattere attraverso "send(socket, variabile, 1,0)". Il problema è che sono due tipi di variabili differenti: fgetc() salva su una char, mentre send() vuole in ingresso una const char*.
Come fò?

Ho provato in questi modi:
Codice:
send(socket, &((const char)variabile),1,0);
send(socket, &((const char*)variabile),1,0);
send(socket, ((const char*)variabile),1,0);
send(socket, variabile,1,0);
ma niente, davano errore.


Poi mi spieghereste cosa sono le variabili con puntatore e quando si usa l'asterisco e quando la & prima della variabile?
__________________
The Dark Side of The MODD
Il mio album su Flickr
Linux User #479003
MrModd è offline   Rispondi citando il messaggio o parte di esso
Old 18-11-2008, 19:30   #2
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
L'unica che non hai provato, cioè questa:

send(socket, &variabile , 1, 0);

Spiegarti cosa è l'operatore di dereference (&) è semplice, ottieni l'indirizzo della variabile alla sua destra.
Spiegarti invece l'operatore *, le variabili puntatore e i mille usi che se ne vuole fare credo che ti convenga leggerlo su un libro.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 18-11-2008, 19:56   #3
MrModd
Senior Member
 
L'Avatar di MrModd
 
Iscritto dal: Apr 2007
Messaggi: 924
Quote:
Originariamente inviato da cionci Guarda i messaggi
L'unica che non hai provato, cioè questa:

send(socket, &variabile , 1, 0);

Spiegarti cosa è l'operatore di dereference (&) è semplice, ottieni l'indirizzo della variabile alla sua destra.
Spiegarti invece l'operatore *, le variabili puntatore e i mille usi che se ne vuole fare credo che ti convenga leggerlo su un libro.
e non funziona comunque...
Io ho questa struttura:
Codice:
char variabile;
do
{
  variabile=fgetc(file);
  send(socket, &file,1,0);
  fputs(&tmp, log);
}
while (variabile==10)
Ma non mi esce mai dal ciclo e il file log si riempie in pochi secondi di caratteri che non esistono in "file".

Riguardo alla &, cosa significa ottenere l'indirizzo? Non vado a chiede alla variabile cosa contiene ma vado dove è memorizzata e me la leggo da solo?
E poi & e * sono collegati?
__________________
The Dark Side of The MODD
Il mio album su Flickr
Linux User #479003
MrModd è offline   Rispondi citando il messaggio o parte di esso
Old 19-11-2008, 01:53   #4
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
Quote:
Originariamente inviato da MrModd Guarda i messaggi
e non funziona comunque...
Io ho questa struttura:
Codice:
char variabile;
do
{
  variabile=fgetc(file);
  send(socket, &file,1,0);
  fputs(&tmp, log);
}
while (variabile==10)
Ma non mi esce mai dal ciclo e il file log si riempie in pochi secondi di caratteri che non esistono in "file".
Ci credo, è sbagliato

send(socket, &variabile,1,0);
fputc(tmp, log);

Con & ottieni appunto l'indirizzo dove è memorizzata la variabile. Una variabile puntatore serve appunto a contenere un indirizzo. Comunque te l'ho detto: sono cose che non si possono improvvisare, per spiegare l'utilizzo dei puntatori servono due capitoli di un libro
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 19-11-2008, 12:09   #5
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Sì, fidati di quel che ti ha detto Cionci: quando un neofita inizia lo studio della programmazione da zero, e si trova davanti per la prima volta il concetto di puntatore e i vari usi che se ne fanno, di solito ci mette un bel po' a inghiottirlo e digerirlo per bene.

E' una cosa fondamentale sapere cosa sono e come e quando e perchè si usano i puntatori: non puoi raccattare una parvenza di conoscenza qui, se la cosa ti interessa sul serio, è necessario un buon libro.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 19-11-2008, 19:20   #6
MrModd
Senior Member
 
L'Avatar di MrModd
 
Iscritto dal: Apr 2007
Messaggi: 924
Oki, per i puntatori leggerò qualcosa di più esteso, ma il programma continua a funzionare...
Si blocca sempre lì, scrive tante "ÿ" nel file ma non va avanti.
__________________
The Dark Side of The MODD
Il mio album su Flickr
Linux User #479003
MrModd è offline   Rispondi citando il messaggio o parte di esso
Old 19-11-2008, 20:14   #7
MrModd
Senior Member
 
L'Avatar di MrModd
 
Iscritto dal: Apr 2007
Messaggi: 924
Ho individuato l'errore (penso):
il fatto è che io dovrei leggere il file fino a che non c'è un ritorno a capo, ma il ciclo condizionale non lo vede.
Io ho messo while (variabile!=10) perchè 10 è il valore decimale per in ritorno a capo, ma il ciclo continua lo stesso.

Vi faccio vedere meglio com'è questo pezzo di programma:
Codice:
rewind(file);
while (controllo==false || variabile!=EOF)
{
  variabile=fgetc(file);
  if (variabile==10)   //questa condizione dovrebbe accadere se c'è un ritorno a capo
  {
    variabile=fgetc(file);
    if (variabile==10) controllo==true;
  }
}
controllo==false;
while (controllo==false || variabile!=EOF)
{
  variabile=fgetc(file);
  if (variabile==10)
  {
    variabile=fgetc(file);
    if (variabile=='a')
    {
      variabile=fgetc(file);
      if (variabile==10) controllo=true;
    }
  }
}
Da qui quindi io dovrei prendere il file e leggerlo finchè non trovo una riga vuota. A questo punto è pronto per leggere il resto del file fino a che non trova in una riga il carattere "a" e una riga vuota.
Poi nel caso non li trova il ciclo dovrebbe comunque finire perchè raggiunge l'EOF. Il problema è che scorre in entrambi i cicli tutto il file.

Avete capito più o meno il problema?
__________________
The Dark Side of The MODD
Il mio album su Flickr
Linux User #479003
MrModd è offline   Rispondi citando il messaggio o parte di esso
Old 20-11-2008, 08:10   #8
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
while (controllo==false && variabile!=EOF)

Sta dentro il while fino a quanto una delle due condizioni non è verificata. Con l'or sta dentro il while fino a quando entrambe le condizioni non sono verificate.
Se ci spieghi cosa stai cercando di fare possiamo dirti come farlo in poche linee con il C++.

Metti così: variabile == '\n'
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 20-11-2008, 17:44   #9
MrModd
Senior Member
 
L'Avatar di MrModd
 
Iscritto dal: Apr 2007
Messaggi: 924
Oh ecco, ho risolto finalmente, oltre a quell'errore di aver messo || al posto di && avevo fatto un errore di sintassi: avendo trasformato un do - while in un while, mi ero scordato di togliere il ; alla fine della condizione...
Comunque il programma è un client per l'invio della posta molto rudimentale: su un file imposto, seguendo uno schema ben preciso, tutti i dati necessari per l'invio dell'email e poi, dopo una riga vuota, il corpo del messaggio comprensivo di header. Il programma invia l'email e salva un log in un altro file.
Tutto qui, ma per me è un gran passo.
Ora devo solo fare delle modifiche per introdurre un controllo negli errori che da il server.
__________________
The Dark Side of The MODD
Il mio album su Flickr
Linux User #479003
MrModd è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Samsung Micro RGB R95H, il primo LCD a LED rossi, verdi e blu di Samsung alla prova del banco di misura Samsung Micro RGB R95H, il primo LCD a LED rossi...
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre iPhone 18 Pro: la recensione del miglior iPhone ...
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34 Panasonic, 30 anni di Toughbook: la "Bibbia...
realme C100x, lo smartphone economico con la batteria da 7500 mAh. La recensione realme C100x, lo smartphone economico con la bat...
Star Wars Zero Company è l'erede di XCOM 2 Star Wars Zero Company è l'erede di XCOM ...
Al via le offerte Amazon Prime e tutte l...
Prime Day e Amazon Seconda Mano: sconto ...
Cuffie e auricolari in offerta Prime Day...
Prime day: 7 mini PC in super sconto da ...
Scope elettriche e lavapavimenti Prime D...
Smartphone Prime Day: le migliori occasi...
Microsoft 365 Family in offerta Prime Da...
E-bike in offerta Prime Day: HillMiles e...
Prime Day TV: OLED LG B6E 65'' a 1.299€,...
Portatili in offerta Prime Day: i 5 migl...
300 milioni di dollari di server NVIDIA ...
'Io sono Giorgia': la Premier Meloni reg...
Galaxy S27 Ultra con Exynos 2700, Samsun...
Altman: tra OpenAI e Anthropic sulla sic...
Tesla Robotaxi, la notte è ancora...
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: 03:44.


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