Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Roborock Qrevo Curv 2 Flow: ora lava con un rullo
Roborock Qrevo Curv 2 Flow: ora lava con un rullo
Qrevo Curv 2 Flow è l'ultima novità di casa Roborock per la pulizia di casa: un robot completo, forte di un sistema di lavaggio dei pavimenti basato su rullo che si estende a seguire il profilo delle pareti abbinato ad un potente motore di aspirazione con doppia spazzola laterale
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite
Abbiamo guidato per diversi giorni la Alpine A290, la prima elettrica del nuovo corso della marca. Non è solo una Renault 5 sotto steroidi, ha una sua identità e vuole farsi guidare
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile
Abbiamo provato a fondo il nuovo Magic 8 Lite di HONOR, e per farlo siamo volati fino a Marrakech , dove abbiamo testato la resistenza di questo smartphone in ogni condizione possibile ed immaginabile. Il risultato? Uno smartphone praticamente indistruttibile e con un'autonomia davvero ottima. Ma c'è molto altro da sapere su Magic 8 Lite, ve lo raccontiamo in questa recensione completa.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 18-11-2008, 20: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, 20: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, 20: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, 02: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, 13: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, 20: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, 21: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, 09: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, 18: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


Roborock Qrevo Curv 2 Flow: ora lava con un rullo Roborock Qrevo Curv 2 Flow: ora lava con un rull...
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite Alpine A290 alla prova: un'auto bella che ti fa ...
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile Recensione HONOR Magic 8 Lite: lo smartphone ind...
Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora Sony WF-1000X M6: le cuffie in-ear di riferiment...
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI Snowflake porta l'IA dove sono i dati, anche gra...
AOC propone un QD-OLED al prezzo di un I...
AGCOM segnalerà la AI Mode di Goo...
L'Estonia porta ChatGPT in classe: firma...
2 nm giapponesi contro TSMC: il piano di...
Questa scopa elettrica Tineco iFLOOR 5 è...
FRITZ!Box 6825 4G sbarca in Italia a 129...
Red Hat presenta Digital Sovereignty Rea...
AMD Zen 6 'Olympic Ridge': sette configu...
Amazon batte Walmart dopo 30 anni: il so...
Digos nel mirino dell'intelligence cines...
Sony non vuole aumentare il prezzo della...
Energia geotermica: la (costosa) rispost...
MG ha già venduto 1 milione di au...
"Something Big Is Happening" —...
Renault chiude il 2025 con una perdita r...
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: 21:30.


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