|
| 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 » | |
![]() |
#31 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
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); } Editato per non aggiungere post inutili. Ultima modifica di Alhazred : 29-06-2004 alle ore 16.52.20 |
![]() |
![]() |
![]() |
#32 |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
![]() |
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 ![]() |
![]() |
![]() |
![]() |
#33 | |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Quota:
Codice:
#include <stdio.h> #include <windows.h> #define Errore_(x) {puts(x); ExitProcess(1);} typedef struct { char colonna; int riga; } t_Mossa; 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 |
|
![]() |
![]() |
![]() |
#34 |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
![]() |
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 ![]() |
![]() |
![]() |
![]() |
#35 |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
![]() |
strncpy(p->colonna, colonna_c, 0);
colonna è un char! Bye ![]() |
![]() |
![]() |
![]() |
#36 | |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Quota:
|
|
![]() |
![]() |
![]() |
#37 |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
![]() |
strncpy(p->riga, riga_s, 0);
Riga è un int... Bye ![]() |
![]() |
![]() |
![]() |
#38 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
![]() |
![]() |
![]() |
![]() |
#39 |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
![]() |
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 ); 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 ![]() |
![]() |
![]() |
![]() |
#40 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
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? |
![]() |
![]() |
![]() |
#41 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
![]() ![]() ![]() |
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); |
![]() |
![]() |
![]() |
#42 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
![]() ![]() ![]() |
p->colonna
cosa s'intewnde con questa notazione ? |
![]() |
![]() |
![]() |
#43 | ||
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Quota:
Quota:
Cosa c'è di sbagliato? Scusate l'ignoranza, ma come già detto il C lo sto imparando ora. |
||
![]() |
![]() |
![]() |
#44 | |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
![]() |
Quota:
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 ![]() |
|
![]() |
![]() |
![]() |
#45 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
![]() ![]() ![]() |
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; } Codice:
typedef struct { char colonna; int riga; } mossa; main(void) { mossa p; p.colonna=97; p.riga=1; } |
![]() |
![]() |
![]() |
Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti) | |
Strumenti discussione | |
|
|
![]() |
||||
Discussione | Autore discussione | Forum | Risposte | Ultimo messaggio |
La grande battaglia dei super eroi! | Sbavi | Chiacchiere in libertà | 83 | 27-02-2009 10.43.39 |
battaglia navale in c# | Joy&Lu | Programmazione | 3 | 01-09-2008 15.08.58 |
Il Signore degli Anelli - La Battaglia per la terra di mezzo | Darth Maul | Masterizzazione Giochi Games | 0 | 01-09-2006 18.16.18 |
[C] Battaglia Navale (versione client server) in Linux | Nanri | Programmazione | 11 | 06-08-2005 14.50.27 |