|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8897
|
[c] chiedo a voi che siete gli unici a potermi dare una risposta
Gente allora tralasciando che il compilatore non me lo compila come era ovvio aspettarselo mentre secondo il mio prof c'è qualche compilatore che lo compila ma quale compilatore riesce mai a compilare sta roba?
Codice:
#include <conio.h>
#include <stdio.h>
#include <windows.h>
void main (){
char Stri[]="Prova stringa";
char *pStri;
pStri = Stri;
printf ("%s\n", pStri);
pStri = &Stri;
printf ("\n\n%s", pStri);
system("PAUSE");
}
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
per quel poco ke ricordo di c e c++...
windows.h non l'ho mai sentito e non ho idea di quello che faccia.... penso sia collegato al comando SYSTEM ke usi perkè altrimenti non lo so proprio... Cmq ke errore ti da? a me alcuni compilatori rompono se non faccio ritornare alla funzione main niente. Se invece scrivo int main..... e poi gli metto un return 0; mi funziona tutto perfettamente... X quanto riguarda il printf non mi ricordo una mazza.... oramai sono circa 8 anni ke non tocco + il c puro... e nel c++ bastava usare il cout ....
__________________
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jun 2003
Città: Genova
Messaggi: 5676
|
perchè non dovrebbe compilare?
ti dovrebbe restituire un warning, ma dovrebbe compilare e funzionare perfettamente. l'array senza parentesi quadre nonè altro che l'indirizzo del primo elemento dell'array. la seconda volta lo rende esplicito e evita il warning, ma non cambia nulla. il fatto che l'arraay è il suo indirizzo lo vedi già la prima volta che usi la scanf. con %s infatti non devi dare la & in quanto il nome dell'array senza quadre è già un indirizzo. forse può essere considerato sporco, ma concettualemnte non c'è alcun errore. ciao |
|
|
|
|
|
#4 |
|
Junior Member
Iscritto dal: Nov 2004
Città: Aosta
Messaggi: 12
|
includi stdlib.h per la chiamata alla funzione system(), per il resto il codice pare plausibile. Se il compilatore ti da errore posta il messaggio, che se ne può discutere.
saluti |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jul 2004
Messaggi: 1578
|
La sintassi è corretta, manca solo la dichiarazione di system
quindi a parte quello qualsiasi compilatore decente dovrebbe compilare |
|
|
|
|
|
#6 |
|
Junior Member
Iscritto dal: Dec 2004
Messaggi: 17
|
Il problema di compilazione è l'assegnazione seguente, se vuoi proprio farlo così magari usa un cast:
pStri = &Stri; Certo è che il tuo professore da esercizi davvero entusiasmanti!!!
__________________
Contattami in diretta su Mercurio Messenger, il mio nick è Marco: www.mercuriomessenger.com |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8897
|
quello che fa non c'è problema system è dichiarata in windows.h, l'errore è appunto che dato che il nome dell'array è già l'inidirizzo, sussiste il problema che quando metto pStri = &Stri qui come è ovvio aspettarselo è errore infatti cerco di dare a un puntatore un doppio puntatore.
Adesso ne VC++ e ne MinGW lo compila. Quale compilatore lo compila? ~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8897
|
Quote:
~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
|
|
|
|
|
|
#9 | ||||||
|
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16212
|
Re: [c] chiedo a voi che siete gli unici a potermi dare una risposta
Premesso che ogni compilatore C deve compilare un programma corretto scritto secondo lo standard:
Quote:
E sono anche inutili in questo specifico programma. Dovresti invece includere stdlib.h, che contiene la dichiarazione della funzione system. Quote:
Il tipo di main deve essere int. Quote:
Quote:
Quote:
Anzi: penso proprio di no, soprattutto dopo aver letto l'intervento di NA01. Quote:
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
||||||
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8897
|
Re: Re: [c] chiedo a voi che siete gli unici a potermi dare una risposta
no la cosa che voglio sapere è solo questa:
pStri = &Stri il system("PAUSE"); l'ho messo io se no non vedevo una mazza. Cmq a me da errore e non lo compila ![]() ~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Milano
Messaggi: 959
|
ma Fontana è un pirla
cmq teo nemmeno devc++ lo compila.. |
|
|
|
|
|
#12 | ||
|
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16212
|
Re: Re: Re: [c] chiedo a voi che siete gli unici a potermi dare una risposta
Quote:
Il compilatore cosa dice di preciso? Forse rileva un tentativo di assegnare un char** a un char* senza effettuare un cast? Prova anche a vedere la sezione 6 delle FAQ di comp.lang.c.
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
||
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8897
|
Quote:
era ovvio ![]() cmq 3 compilatori non lo compilano - devc++ - Visual C++ - MinGW ~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
|
|
|
|
|
|
#14 | |
|
Junior Member
Iscritto dal: Dec 2004
Messaggi: 17
|
Re: Re: Re: [c] chiedo a voi che siete gli unici a potermi dare una risposta
Quote:
pStri = (char*) &Stri; Resta il fatto che non è bello!!
__________________
Contattami in diretta su Mercurio Messenger, il mio nick è Marco: www.mercuriomessenger.com |
|
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
|
MinGW lo compila, quindio anche gcc...l'importante è che dai al file estensione .c e non .cpp, altrimenti segue le regole di type checking del c++, che non ammettono cast impliciti; comunque ti da un warning:
In function `main': warning: assignment from incompatible pointer type Ad ogni modo cosi facendo assegni a pStri l'indirizzo di Stri, che è un array, ovvero un puntatore, quindi assegni a pStri un puntatore a un puntatore, da cui il warning, sebbene quando vai a stampare comuqnue vienne stampata la stringa normalmente stampata; il caso in cui invece non funziona (ma compila come prima) è quello in cui dichiari Stri come un char* piuttosto che come un char[]: char *Stri2="Prova stringa"; pStri = &Stri2; printf ("\n\n%s", pStri); in questo caso non stampa la stringa. ad ogni modo non capisco il senso di questi assegnamenti strani: a che scopo li fai?
__________________
Sun Certified Java Programmer EUCIP Core Level Certified European Certification of Informatics Professionals |
|
|
|
|
|
#16 | |
|
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8897
|
Quote:
~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
|
|
|
|
|
|
#17 | |
|
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8897
|
Quote:
~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
|
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Apr 2002
Città: PD
Messaggi: 11792
|
Re: [c] chiedo a voi che siete gli unici a potermi dare una risposta
pStri = &Stri;
E' un errore , ben diverso ( e corretto ) sarebbe pStri = &Stri[0]; Non é una questione di casting , é proprio un errore logico , il valore di &Stri non esiste , é come chiedere l' indirizzo di una costante numerica . A seconda del compilatore i risultati della prima operazione possono essere vari e poco prevedibili . In effetti Stri é un indirizzo virtuale che si riferisce all' array , non l' array stesso , nella migliore delle ipotesi l' operatore & viene ignorato e il codice funziona come pStri = Stri In alternativa prevedo un bel Segmentation Fault in esecuzione .
__________________
Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn |
|
|
|
|
|
#19 | |
|
Junior Member
Iscritto dal: Dec 2004
Messaggi: 17
|
Quote:
__________________
Contattami in diretta su Mercurio Messenger, il mio nick è Marco: www.mercuriomessenger.com |
|
|
|
|
|
|
#20 | |
|
Senior Member
Iscritto dal: Apr 2002
Città: PD
Messaggi: 11792
|
Quote:
Probabilmente il motivo va ricercato nel modo in cui sono gestiti gli array dal compilatore , dal momento che per definizione un array ha indirizzo fisso e non modificabile non viene creata nessuna variabile Stri che contiene l' indirizzo dell' array , ma viene inserito direttamente il valore dell' indirizzo . Nel momento in cui si chiede l' indirizzo &Stri il compilatore diventa "creativo" e passa direttamente l' unico indirizzo che conosce cioé quello dell' array , cmq si tratta di un' operazione rischiosa , basta dichiarare char * Stri="Prova stringa"; per vedere le stelle
__________________
Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:08.











Contattami in diretta su Mercurio Messenger, il mio nick è Marco: 
era ovvio








