Telefonino.net network
 
| HOMEPAGE | INDICE FORUM | REGOLAMENTO | ::. NEI PREFERITI .:: | RSS Forum | RSS News | NEWS web | NEWS software |
| PUBBLICITA' | | ARTICOLI | WIN XP | VISTA | WIN 7 | REGISTRI | SOFTWARE | MANUALI | RECENSIONI | LINUX | HUMOR | HARDWARE | DOWNLOAD | | CERCA nel FORUM » |

Torna indietro   WinTricks Forum > Software > Programmazione

Notices

Rispondi
 
Strumenti discussione
Vecchio 29-06-2004, 17.08.45   #31
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
E quest'altro è il processo che dovrebbe scrivere sulla memoria condivisa:
Codice:
void scrivi(HANDLE mapping) {
	char colonna_c;
	int colonna_i, riga_s;
	t_Mossa *p;
	
	p = (t_Mossa*)MapViewOfFile(mapping, FILE_MAP_WRITE, 0, 0, 0);
	if(p == NULL)Errore_("Impossibile attaccare la memoria condivisa");
	puts("Inserire la lettera per la colonna: ");
	scanf("%s",colonna_c);
	colonna_i = ChartoI(colonna_c); //converto il carattere in intero
	
	//controllo dell'input per la colonna e scrittura
	if(colonna_i < 1 || colonna_i > 10) {
		do {
			printf("Input errato!\n");
			puts("Inserire la lettera per la colonna: ");
			scanf("%s",colonna_c);
			colonna_i = ChartoI(colonna_c);
		} while (colonna_i > 0  && colonna_i < 11);
	}
	strncpy(p->colonna, colonna_c, 0);

	puts("inserire un intero per la riga: ");
	scanf("%u", riga_s);
	
	//controllo dell'input per la riga e scrittura
	if(riga_s < 1 || riga_s > 10) {
		do {
			printf("Input errato!\n");
			puts("Inserire un intero per la riga: ");
			scanf("%u", riga_s);
		} while (riga_s > 0 && riga_s < 11);
	strncpy(p->riga, riga_s, 0);
	ExitProcess(0);
}
In neretto le righe a cui si riferiscono gli warnings.

Editato per non aggiungere post inutili.

Ultima modifica di Alhazred : 29-06-2004 alle ore 17.52.20
Alhazred non è collegato   Rispondi citando
Vecchio 29-06-2004, 17.28.44   #32
P8257 WebMaster
Gold Member
 
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
P8257 WebMaster promette bene
L'hai compilato?

Attento a "p"...
Non so come hai implementato "t_Mossa" ma se è un typedef struct allora "p" è un puntatore a struttura che tu ricasti, probabilmente perché se non lo fai, il compilatore ti segnala che i tipi sono incompatibili ... ed assegni a MapViewOfFile, la quale ritorna LPVOID se non sbaglio, con la posizione di partenza dell'offset del mapping .. quindi come potrebbe essere un t_Mossa p?

Bye
P8257 WebMaster non è collegato   Rispondi citando
Vecchio 29-06-2004, 17.44.07   #33
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
Quota:
Originariamente inviato da P8257 WebMaster
L'hai compilato?

Attento a "p"...
Non so come hai implementato "t_Mossa" ma se è un typedef struct allora "p" è un puntatore a struttura che tu ricasti, probabilmente perché se non lo fai, il compilatore ti segnala che i tipi sono incompatibili ... ed assegni a MapViewOfFile, la quale ritorna LPVOID se non sbaglio, con la posizione di partenza dell'offset del mapping .. quindi come potrebbe essere un t_Mossa p?

Bye
Ecco l'inizio:
Codice:
#include <stdio.h>
#include <windows.h>

#define Errore_(x) {puts(x); ExitProcess(1);}

typedef struct {
	char colonna;
	int riga;
} t_Mossa;
Intanto ho compilato, tolto gli errori ed editato il codice postato in precedenza, adesso ho questi Warning:
battleship.c(59) : warning C4047: 'function' : 'char *' differs in levels of indirection from 'char '
battleship.c(59) : warning C4024: 'strncpy' : different types for formal and actual parameter 1
battleship.c(59) : warning C4047: 'function' : 'const char *' differs in levels of indirection from 'char '
battleship.c(59) : warning C4024: 'strncpy' : different types for formal and actual parameter 2
battleship.c(71) : warning C4047: 'function' : 'char *' differs in levels of indirection from 'int '
battleship.c(71) : warning C4024: 'strncpy' : different types for formal and actual parameter 1
battleship.c(71) : warning C4047: 'function' : 'const char *' differs in levels of indirection from 'int '
battleship.c(71) : warning C4024: 'strncpy' : different types for formal and actual parameter 2
Alhazred non è collegato   Rispondi citando
Vecchio 29-06-2004, 17.51.55   #34
P8257 WebMaster
Gold Member
 
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
P8257 WebMaster promette bene
Si, ci sono un po' di incongruenze di livello, tipiche dei puntatori (char * su char ad esempio)...

Attenzione ai tipi in return e ai parametri delle funzioni...

Bye
P8257 WebMaster non è collegato   Rispondi citando
Vecchio 29-06-2004, 17.53.45   #35
P8257 WebMaster
Gold Member
 
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
P8257 WebMaster promette bene
strncpy(p->colonna, colonna_c, 0);

colonna è un char!

Bye
P8257 WebMaster non è collegato   Rispondi citando
Vecchio 29-06-2004, 17.54.02   #36
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
Quota:
Originariamente inviato da P8257 WebMaster
Si, ci sono un po' di incongruenze di livello, tipiche dei puntatori (char * su char ad esempio)...

Attenzione ai tipi in return e ai parametri delle funzioni...

Bye
Me lo ha detto anche il compilatore, ma non ne capisco il significato, cosa devo fare?
Alhazred non è collegato   Rispondi citando
Vecchio 29-06-2004, 17.54.31   #37
P8257 WebMaster
Gold Member
 
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
P8257 WebMaster promette bene
strncpy(p->riga, riga_s, 0);

Riga è un int...

Bye
P8257 WebMaster non è collegato   Rispondi citando
Vecchio 29-06-2004, 17.58.06   #38
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
Alhazred non è collegato   Rispondi citando
Vecchio 29-06-2004, 18.00.14   #39
P8257 WebMaster
Gold Member
 
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
P8257 WebMaster promette bene
Devi rispettare ciò che le funzioni vogliono e devi scaricare il loro valore di ritorno in un'entità adeguata.

Bisogna gaurdare sempre il prototipo delle funzioni...

ad esempio:
Codice:
char *  strncpy ( char * dest, const char * src, sizet_t num );
Questa è la strncpy...
ritorna un puntatore a stringa di cui nel tuo caso puoi benissimo fregartene e lasciare che si perda... però vuole a sua volta un puntatore a stringa (char *) dest dove deve mettere il risultato, non puoi dargli un char o un int.. devi allocare una stringa almeno di 2 caratteri, poi vuole la stringa, in questo caso anche un singolo char va bene, da inserire e col size_t te la puoi cavare semplicemente col sizeof(src)...

Non voglio farti fare confusione, sii solo più attento ai tipi di dati e ai casting.. cerca di farne il meno possibile .. ti conviene e diminuisci i puntatori dove possibile.

Bye
P8257 WebMaster non è collegato   Rispondi citando
Vecchio 29-06-2004, 18.16.30   #40
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
Ok, non so come togliere questi warning.
Ho davanti un manuale di C, ma non so dove guardare.
Credo di aver capito che non posso assegnare un int o un char ad un tipo strutturato anche se lo assegno ad un campo del tipo in questione definito come int o char.
Come faccio scrivere i valori di colonna e riga in p?
Alhazred non è collegato   Rispondi citando
Vecchio 29-06-2004, 18.31.13   #41
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Cio che voleva spiegarti WebMaster è che tu utilizzi una funzione che ha come valore di ritorno una stringa. Tu la utilizzi sia quando hai a che fare con una stringa, sia quando hai a che fare con un numero.

Cosa significa
Codice:
t_Mossa *p;
	
	p = (t_Mossa*)MapViewOfFile(mapping, FILE_MAP_WRITE, 0, 0, 0);
Spiega a parole cosa imponi al compilatore di fare con queste due istruzioni.
LoryOne non è collegato   Rispondi citando
Vecchio 29-06-2004, 18.32.21   #42
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
p->colonna

cosa s'intewnde con questa notazione ?
LoryOne non è collegato   Rispondi citando
Vecchio 29-06-2004, 18.40.09   #43
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
Quota:
Originariamente inviato da LoryOne
Cio che voleva spiegarti WebMaster è che tu utilizzi una funzione che ha come valore di ritorno una stringa. Tu la utilizzi sia quando hai a che fare con una stringa, sia quando hai a che fare con un numero.

Cosa significa
Codice:
t_Mossa *p;
	
	p = (t_Mossa*)MapViewOfFile(mapping, FILE_MAP_WRITE, 0, 0, 0);
Spiega a parole cosa imponi al compilatore di fare con queste due istruzioni.
Con questa dovrei avere un puntatore di tipo t_Mossa che punta all'inizio della memoria condivisa.
Quota:
p->colonna
cosa s'intende con questa notazione ?
Questa dovrebbe indirizzare sul campo colonna di p.

Cosa c'è di sbagliato? Scusate l'ignoranza, ma come già detto il C lo sto imparando ora.
Alhazred non è collegato   Rispondi citando
Vecchio 30-06-2004, 10.23.31   #44
P8257 WebMaster
Gold Member
 
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
P8257 WebMaster promette bene
Quota:
Alhazred ha scritto:
Ok, non so come togliere questi warning.
Ho davanti un manuale di C, ma non so dove guardare.
Credo di aver capito che non posso assegnare un int o un char ad un tipo strutturato anche se lo assegno ad un campo del tipo in questione definito come int o char.
Come faccio scrivere i valori di colonna e riga in p?
Se t_Mossa è un tipo strutturato formato da un char e un int, allora non hai bisogno di funzioni intermedie per operare con i campi in quanto essi sono comunque dei tipi nativi.

Ti basta l'operatore di referencing e il gioco è fatto:

Se Colonna = 'A' e Riga = 1 allora:

t_Mossa p;

p -> Colonna = 'a';
p -> Riga = 1;

Semplicemente.

Se usi il tipo dati in questo modo, vedrai che spariranno un bel po' di warning, perché elimini la 'strncpy' usata in maniera errata.

Bye
P8257 WebMaster non è collegato   Rispondi citando
Vecchio 30-06-2004, 10.24.34   #45
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Tranquillo, non ti sto dicendo che stai sbagliando.
Ora ti prego di dirmi cosa riscontri in questi due programmini:

Programmino 1:

Codice:
typedef struct {
    char colonna;
    int riga;
} mossa;

main(void)
{
   mossa *p;
   p->colonna=97;
   p->riga=1;
}
Programmino 2:

Codice:
typedef struct {
    char colonna;
    int riga;
} mossa;

main(void)
{
   mossa p;
   p.colonna=97;
   p.riga=1;
}
Ti dirò subito che il compilatore li compila senza problemi.
LoryOne non è collegato   Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 
Strumenti discussione

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is ON
Gli smilies sono ON
[IMG] è ON
Il codice HTML è OFF

Vai al forum

Discussioni simili
Discussione Autore discussione Forum Risposte Ultimo messaggio
La grande battaglia dei super eroi! Sbavi Chiacchiere in libertà 83 27-02-2009 11.43.39
battaglia navale in c# Joy&Lu Programmazione 3 01-09-2008 16.08.58
Il Signore degli Anelli - La Battaglia per la terra di mezzo Darth Maul Masterizzazione Giochi Games 0 01-09-2006 19.16.18
[C] Battaglia Navale (versione client server) in Linux Nanri Programmazione 11 06-08-2005 15.50.27

Orario GMT +2. Ora sono le: 16.50.25.


E' vietata la riproduzione, anche solo in parte, di contenuti e grafica.
Copyright © 1999-2017 Edizioni Master S.p.A. p.iva: 02105820787 • Tutti i diritti sono riservati
L'editore NON si assume nessuna responsabilità dei contenuti pubblicati sul forum in quanto redatti direttamente dagli utenti.
Questi ultimi sono responsabili dei contenuti da loro riportati nelle discussioni del forum
Powered by vBulletin - 2010 Copyright © Jelsoft Enterprises Limited.