Newsgroup: it.comp.lang.c++
Titolo: Problemi di programmazione

Salve a tutti!
Da poco sono entrato in questo gruppo e spero di trarne qualche
vantaggio (sono un principiante).
Ho un paio di problemi sulla programmazione in C e sarò grato a
chiunque voglia rispondere a qualunque problema sotto descritto.
Problema 1.
Esaminiamo il seguente programma:
_______________________________
 
	char *p = "Edoardo";
	char *s;
	strcpy(s,p);
_______________________________
Il compilatore sotto Windows risponde:
NULL POINTER ASSIGNMENT.
Il compilatore sotto linux compila, il linker linka, ma in fase di
esecuzione il sistema operativo risponde:
SEGMENTATION FAULT (CORE DUMPED).
Il secondo argomento della strcpy non dà alcun problema (infatti p è
inizializzato, va bè ma che significa che è inizializzato), il
problema è il primo argomento.
Se anzichè scrivere
	char *s;
scrivo ad esempio
	char s[100];
tutto funziona regolarmente!
Oppure, se inizializzo anche *s con
	char *s="eddie";
Allora anche quì tutto funziona!
PERCHE'??
Ho riflettuto a lungo ma non sono riuscito a capire come funziona
l'intera faccenda.
Vi PREGO DI RISPONDERMI NEL MODO PIù SEMPLICE POSSIBILE
SARO' GRATO A CHIUNQUE MI FORNIRA' CHIARIMENTI.
Problema 2.
Sotto linux mi diverto a scrivere i vari sottoprogrammi e le varie
funzioni in file a parte. ESEMPIO
____________________________
FILE MAIN.CPP
#include<iostream.h>
#include"prototipo.h"
void main(){
int i,d;
cout<<"Insert an integer: ";
cin>>i;
d = doppio(i);
cout<<"Il doppio è: "<<d<<endl;
}
FILE DOPPIO.CPP
int doppio(int x){
return x*2;
}
Poi lo compilo:
g++ -c DOPPIO.CPP
FILE PROTOTIPO.H
int doppio(int);
____________________________
A questo punto creo l'eseguibile:
g++ -o MAIN.CPP DOPPIO.O<invio>
Il problema è il seguente:
Se in qualche sottoprogramma devo usare le funzioni di INPUT/OUTPUT
cin e cout, i file come DOPPIO.CPP non si compilano perchè il
compilatore risponde ad esempio con UNDEFINED SYMBOL COUT.
Invece posso usare tranquillamente le funzioni PRINTF e SCANF.
PERCHE' CIN E COUT NON SONO RICONOSCIUTI, NEPPURE SE INCLUDO NEI FILE
CONTENENTI IL SOTTOPROGRAMMA LO HEADER IOSTREAM.H??  
UN GRAZIE ANTICIPATO A CHIUNQUE VORRA' RISPONDERE. 
 
						EDOARDO

 CONTENENTI IL SOTTOPROGRAMMA LO HEADER IOSTREAM.H??  
L'header file da includere e' <iostream>; cin e cout non sono
riconosciuti perche' sono definiti nel namespace std::.
Ti consiglio di consultare qualche testo di base sul linguaggio C++.
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Univ. of Padova, Dept. of Physics - Padova, Italy            
lor...@pd.infn.it
The instructions said to use Windows 98 or better - so I installed FreeBSD.



char *p = "Edoardo" è un puntatore ad un array di caratteri, cioe' un
puntatore al primo byte di un'area di memoria che contiene "Edoardo".
char *s è un puntatore ad un carattere.
Tu cerchi di copiare una area di memoria di 8 byte (7 di "Edoardo" +1)
in un area che contiene altre cose, infatti char *s punta ad un byte
sostanto.
char s[100] è un puntatore ad un'area di memoria di 100 byte e quindi
la copia funziona.
char s* = "eddie" in teoria non dovrebbe funzionare perchè è di 6
byte.

Perchè la direttiva corretta è
#include <iostream>
Aggiungi anche 
using namespace std;
oppure usa gli stream con il nome del namespace:
std::cout
e
std::cin
F.