Introduzione a Linux: differenze con windows e strumenti per la programmazione
-
Upload
valerio-bruno -
Category
Documents
-
view
258 -
download
0
description
Transcript of Introduzione a Linux: differenze con windows e strumenti per la programmazione
Introduzione a Linux
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
Differenze con Windows e strumenti per la programmazione
Corso di Laboratorio di Programmazione dei calcolatori 2007
Cos'è Linux ?
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
● Il cuore di un sistema operativo (Linux Kernel)– Sviluppato inizialmente da Linus Torvalds, oggi da una
comunità di persone che lavorano delocalizzate.– Software Libero!
● Distribuzione GNU-Linux (Linux Distro): un sistema operativo completo (Kernel + Compilatore + Applicazioni)– TANTI sistemi operativi Linux ( http://distrowatch.com/ ).
Distro Linux: Pro
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
● Software Libero !– Modificabile– In rapida evoluzione– Gratuito
● Sicuro e stabile– Virus? Quali virus?– Esecuzione esplicita di programmi = Eliminazione
necessità firewall.
Distro Linux: Pro
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
● Vasta comunità di utenti– Forum e LUG di supporto.– Nuovi amici
● Grande varietà di software.
Distro Linux: Contro
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
● Mancanza del supporto hardware.● Integrazione funzionalità desktop sufficiente ma
ancora da migliorare.● Milioni di programmi, centinaia di distro: che
fatica l'integrazione! (per fortuna ci sono i gestori di pacchetti che risolvono le dipendenze)
● Mancanza di supporto sui normali canali commerciali.
Distro Linux: Quale ?
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
http://www.opensuse.org/
http://reallylinux.com/docs/choosinglinux.shtml
http://www.ubuntulinux.com
Il filesystem di Linux
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
Il filesystem di LinuxDifferenze con Windows
● In Linux i file sono ordinati in una unica gerarchia di cartelle.
● I percorsi si indicano con il front-slash / e non con il back-slash \ .
Ad esempio i file dell'utente pippo si trovano in:
/home/pippo/invece che in “c:\Documents and Settings\pippo\”
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
Il filesystem di LinuxDescrizione generale delle cartelle
● /boot : contiene i file necessari all'avvio del sistema.● /sbin : contiene i programmi per l'amministrazione del
sistema (es: configurazione hardware). ● /bin: contiene programmi di utilità.● /lib: contiene le librerie utilizzabili dai vostri programmi.● /etc : contiene i file di configurazione del sistema.● /home : contiene i file personali degli utenti.
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
Il filesystem di LinuxDescrizione generale delle cartelle 2
● /root : la home dell'utente root.● /mnt : contiene i mount point per altre periferiche di
memoria di massa.● /lost+found : file recuperati da blocchi di sistema● /dev : contiene file che rappresentano periferiche
hardware.● /proc : contiene file che rappresentano processi.
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
Il filesystem di LinuxDescrizione generale delle cartelle 3
● /opt : contiene programmi non previsti dal sistema di base.
● /var : contiene file variabili (log di sistema, archivi di progetto, .... ).
● /tmp : contiene file temporanei.● /usr : contiene file e programmi degli utenti condivisi
tra gli utenti.
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
Il filesystem di LinuxDifferenze con Windows 2
● Linux è case sensitive !!! (come il C)● Le applicazioni sono “sparse” per il filesystem.
Dal momento che non esistono i drive (A per il floppy , C per il disco fisso, D per il cdrom, ....), come accedo ad i file sul mio floppy disk o sulla mia penna usb ?
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
Il filesystem di LinuxDifferenze con Windows 3
● Per accedere ad i file su un dispositivo esterno (floppy disk, penna usb, ecc..) devo prima fare (o il sistema, dopo aver rilevato la periferica, esegue) il mount del dispositivo.
● I file “appariranno come per magia” in una sotto cartella del filesystem.
● Quando ho finito con i file, prima di scollegare il dispositivo DEVO fare l'unmount del dispositivo.
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
Il filesystem di LinuxGli utenti, i gruppi ed i loro file
● Linux è un sistema multi-utente;● Un utente è identificato da una coppia
username e password;● Ciò che un utente può fare o non può fare è
definito da i suoi permessi sui file.● root è il super utente: può fare tutto su tutti.
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
Il filesystem di LinuxGli utenti, i gruppi ed i loro file 2
● In Linux sono inoltre definiti i gruppi di utenti.● Un utente appartiene almeno ad un gruppo;● E' possibile impostare dei permessi specifici ad
un gruppo, senza dover impostare tali permessi ad ogni utente di quel gruppo.
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
Il filesystem di LinuxGli utenti, i gruppi ed i loro file 3
● Ad ogni file sono associati:– l'utente proprietario del file ed i permessi che
quest'ultimo ha sul file stesso.– un gruppo di utenti (generalmente il gruppo principale
del proprietario) ed i permessi che gli utenti di questo gruppo hanno sul file stesso
– i permessi concessi a tutti coloro che non sono il proprietario e non appartengono al gruppo associato.
Il filesystem di LinuxGli utenti, i gruppi ed i loro file
4● i permessi
corrispondono a 3 bit: uno per la lettura, uno per la scrittura ed uno per l'esecuzione.
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
Utilizzare Linux da shellIntroduzione
● Una shell è un interprete di comandi.● Lavora in modalità interattiva ma anche batch.● Esistono tante shell: tcsh, csh, sh, ksh, perchè
proprio bash?● Maggiori informazioni sulla bash le trovate su
http://www.gnu.org/software/bash
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
Utilizzare Linux da shellIntroduzione 2
● Perchè utilizzare la shell quando esistono tante belle interfacce grafiche?– Per alcune cose utilizzare la shell è più veloce.– L'interfaccia grafica potrebbe non essere presente
sulla macchina che stiamo usando (eg. server).– Potrebbe essere l'unico modo per accedere ad una
funzionalità.
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
Utilizzare Linux da shellPrimo incontro con il mostro
● Si accede alla shell– quando ci si logga in modalità testuale– tramite il programma Konsole di KDE– tramite il programma Terminale di Gnome– ... tramite un qualche programma di un qualche
window manager– collegandosi da remoto alla macchina
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
Utilizzare Linux da shellPrimo incontro con il mostro 2
● Si presenta come un promptnomeUtente@nomeComputer
percorsoCartellaSelezionata $
● Il carattere ~ (tilde) indica la home folder dell'utente.
...ed è lì, immobile, che attende i vostri comandi...
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
Utilizzare Linux da shellConvenzioni per i comandi
● Quando si inserisce un comando questo può avere parametri ed opzioni; in generale:– le opzioni vanno prima dei parametri;– le opzioni sono precedute dal meno – o dal doppio
meno -- ;– quasi tutti i comandi hanno l'opzione –help che fa
stampare una breve guida del comando.● es: ls --help
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
Introduzione all'utilizzo di Linux da shellNavigare il filesystem
● Con il comando cd è possibile spostarsi tra le cartelle– utilizzando un path (relativo o assouluto) come
parametro, la shell ci porta alla cartella puntata dal path.
– senza parametri ci fa ritornare nella home;– utilizzando i .. come parametro saliamo la
gerarchia di un livello;
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
Introduzione all'utilizzo di Linux da shellVisualizzare i file
● Con il comando ls è possibile esaminare il contenuto di una cartella; alcune opzioni interessanti:– -a mostra i file nascosti;– -l mostra i file in un'unica colonna con i loro permessi, gli
utenti ed i gruppi associati, la loro dimensione in byte, l'ultima data di modifica;
– -h mostra la dimensione dei file nell'ordine di grandezza più comodo per la lettura da essere umano; questa opzione deve essere usata insieme all'opzione l.
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
Introduzione all'utilizzo di Linux da shell
Gestione dei file● rm <nomeFile>
– Cancella un file● rm -r <nomeCartella>
– Cancella una cartella e tutte le sottocartelle● mv <nomeFile> <nuovoPath>
– Sposta un file nel nuova cartella
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
Introduzione all'utilizzo di Linux da shell
Gestione dei file 2● nano <nomeFile> oppure pico <nomeFile>
– Crea/modifica un file● mv <nomeFile> <nuovoNomeFile>
– Rinomina un file● mkdir <nomeCartella>
– Crea una cartella
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
Introduzione all'utilizzo di Linux da shellCercare un file
● find <percorsoInizioRicerca> -name <schemaNomeFile> – Ricerca dal percorso indicato in tutte le sottocartelle i
file corrispondenti allo schema passato.● find <percorsoInizioRicerca> -regex <schemaNomeFile>
– Come il precedente tranne che lo schema passato e' un'espressione regolare.
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
Introduzione all'utilizzo di Linux da shellCambiare i permessi su un file
● chmod <soggettoPermessi> < + oppure - ><permesso> <file> – soggettoPermessi: u per utente proprietario, g per gruppo del
file, o per tutti gli altri.– permesso: r per la lettura, w per la scrittura, x per
l'esecuzione.● Esempio:
– chmod og-wx file1 ● rimuove a tutti coloro che non sono il proprietario il diritto
di scrittura e di esecuzione.
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
Introduzione all'utilizzo di Linux da shellEseguire un programma
● ./<nomeProgramma> – naturalmente chi prova ad eseguirlo deve avere il
permesso di farlo.– E' possibile evitare di usare il ./ solo se il programma è
contenuto in una cartella indicata nella variabile di ambiente PATH.
– Se il programma non è nella cartella corrente, sostituire il ./ con il percorso alla cartella del programma.
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
Introduzione all'utilizzo di Linux da shellCambiare la propria password
● passwd – richiede la vecchia password per assicurarsi che siete
il proprietario della password.– richiede la nuova password.
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
Introduzione all'utilizzo di Linux da shellLa guida di riferimento per i comandi
● man <comando> oppure man <funzione> – Visualizza la prima pagina relativa a quel
comando/funzione.● man <numPagina> <argomento>
– Visualizza la pagina <numPagina> relativa a quell'argomento.
● man -a <argomento>– Visualizza tutte le pagine relative a quell'argomento.
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
Introduzione all'utilizzo di Linux da shellI flussi di un programma
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
STDIN (0)STDOUT (1)
Programma
STDERR (2)
Introduzione all'utilizzo di Linux da shellLa guida di riferimento per i comandi
● cat <file> – Stampa il contenuto di un file a video.
● grep <stringa>– Legge il flusso di input e ne ristampa solo le righe che
contengono la stringa
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
Introduzione all'utilizzo di Linux da shellRedirezione su file
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
E' possibile redirigere i flussi standard da/verso un file:● <comando> < <file di input>
● Il contenuto del <file di input> viene usato come flusso STDIN per il comando.
● <comando> > <file di output>● Lo STDOUT del programma viene salvato su <file di output>.
● <comando> 2> <file di error>● Lo STDERR del programma viene salvato su <file di error>.
Introduzione all'utilizzo di Linux da shellRedirezione su file
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
Esempi:● ls --help > aiutoLs.txt
● Stampa la guida di ls dentro il file aiutoLs.txt
● sendmail [email protected] < email● Invia una email il cui contenuto è scritto nel file.
● Automazione trasferimento file in remoto con ftp.
Introduzione all'utilizzo di Linux da shellCollegamento tra programmi
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
E' possibile costruire una sequenza di programmi collegata dai flussi, in modo che l'STDOUT del programma[x] è l'STDIN del programma[x+1].
... ...P[x-1] P[x] P[x+1]
Per creare questo collegamento usiamo il simbolo pipe | (quello a sx dell'1 e sopra il backslash \ ).
Introduzione all'utilizzo di Linux da shellCollegamento tra programmi
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
Esempi:● cat file1 | grep parola
● Stampa le righe di file1 che contengono parola● Si possono concatenare più grep per restringere l'insieme
delle righe.● Utile per cercare una chiamata di funzione in un file di codice
C.● Applicare più operazioni su un file:
● cat fileCompresso | decomprimi | stampa
gcc – GNU C Compiler
● Parte del progetto GNU● Supporta lo standard originale del linguaggio C (C89)
ed il più recente C99● In realtà gcc oggi sta per GNU Compilers Collection ● Homepage del progetto http://gcc.gnu.org
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
gcc -GNU C CompilerIl processo di compilazione
● pre-process
● compile
● assemble
● link
esegue le #macro
crea un codice intermedio vicino a quello macchina
Trasforma il codice intermedio in codice macchina
Collega le varie parti di codice, ordinandole in un programma
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
gcc -GNU C CompilerCominciamo a compilare qualcosa
● gcc <nomeSorgente.c>● preprocessa, compila, assembla e linka● nessun output (a schermo)● produce un eseguibile a.out #include <stdio.h>
int main(){ printf("Hello World!"); return 0;}
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
gcc -GNU C CompilerOpzioni interessanti
● -o <nomeFile>– specifica il nome del file generato dalla
compilazione (invece di a.out);● -l <nomeLibreria>
– fa il link usando una libreria: questa opzione può essere ripetuta;
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
gcc -GNU C CompilerOpzioni interessanti 2
● -D <MACRO>=<valoreMacro>– definisce la macro prima di processare i file;
● -I <path>– specifica una cartella in cui il compilatore deve
cercare file da includere di default (quelli tra <>);● -L <path>
– specifica una cartella in cui il compilatore deve cercare le librerie
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
gcc -GNU C CompilerOpzioni interessanti 3
● --std=c89 oppure --std=c99– specifica che la compilazione deve essere eseguita
secondo lo standard● --pedantic
– specifica che il compilatore deve dare errore per QUALSIASI cosa che non è conforme allo standard.
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
gcc -GNU C CompilerOpzioni interessanti 4
● -E– Preprocessa i file in input e stampa a video il
risultato;● -S
– Preprocessa e compila: non assembla né linka; ● -c
– Preprocessa, compila ed assembla, ma non linka.
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
gcc -GNU C CompilerErrori comuni: distinzione tra include e librerie
● Negli header file vanno le dichiarazioni, non le definizioni;
● Al gcc vanno passati solo i file .c ;● Quando si utilizza una libreria esterna non basta
includere le sue dichiarazioni ma bisogna anche linkare il corpo delle sue funzioni;
● La libreria standard viene linkata automaticamente;
Debugging● Un debugger è uno strumento che permette di:
– controllare l'esecuzione di un programma che avete scritto, interrompendola o riprendendola in un determinato momento.
– controllare lo stato del vostro programma (variabili, stack ed altro..)
● ovvero di studiare l'esecuzione del codice da voi scritto per determinare se ci sono dei casi in cui si verificano anomalie (bug).
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
Debugging● Scoprire bachi utilizzando un debugger è
un'operazione piuttosto tediosa ed andrebbe evitata per quanto possibile:– facendo una buona progettazione PRIMA ( ad es. con
diagrammi di flusso e schemi dei moduli)– utilizzando regole di buona programmazione ( ad es.
evitare le variabili globali, utilizzare dei nomi di variabili comprensibili)
... ma se proprio ci siamo presi un baco ...
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
gdb – GNU Debugger
● Debugger molto potente con interfaccia utilizzabile da shell.
● Fa parte del progetto GNU● Maggiori informazioni su
http://www.gnu.org/software/gdb
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
gdb – GNU Debugger
● Per utilizzare il debugger sul vostro programma dovete compilarlo con l'opzione -g ;
● Eseguite gdb <nomeProgramma> ;● A questo punto potete controllare l'esecuzione
del programma inserendo comandi al prompt di gdb.
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
gdb – GNU DebuggerComandi
● break <nomeFunzione> oppure break <nomefile>:<riga> – Inserisce un breakpoint all'inizio della funzione o alla
riga indicata;● print <nomeVariabile> oppure print <espressione>
– stampa il contenuto di una variabile o il valore di una espressione;
● run– Fa partire l'esecuzione del programma;
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
gdb – GNU DebuggerComandi 2
● next – Va avanti di una istruzione;
● step– entra nell'esecuzione dell'istruzione;
● finish– Continua l'esecuzione del programma finchè la
funzione corrente non termina;
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
gdb – GNU DebuggerComandi 3
● kill – interrompe l'esecuzione del programma;
● display <variabile> oppure display <espressione>– come print, ma la stampa viene ripetuta ad ogni
interruzione del programma;● continue
– riprende l'esecuzione del programma finché non incontra un breakpoint o il programma non termina;
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
gdb – GNU DebuggerNavigare la pila delle chiamte
● backtrace – mostra la pila delle chiamate;
● frame <numeroChiamata>– seleziona la chiamata di funzione associata al
numero passato;
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
Scrivere un programma che...● Prenda in input una serie di parole
– Divise dal carattere a capo– La lettura dell'input si ferma nel caso l'utente
inserisca la parola basta.● Le inserisca in un array di parole● Al termine ristampi tutte le parole
Assumiamo che l'utente non sbagli MAI la procedura di inserimento
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
Strutturiamo il codice..
Leggi una parola dall'input
è basta?
Aggiungila nell'arrayNO
Stampa tutte le parole nell'arraySI Fine
Inizio
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
Vediamo il codice...
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
Bug numero 1● Ho usato la funzione fgets senza aver letto bene il
suo funzionamento sul manuale.● Quando la funzione incontra un a capo '\n'
interrompe la lettura dell'input; il problema è che memorizza anche questo carattere nel buffer.
● Quindi se l'utente scrive basta, nel buffer verrà scritto “basta\n” ed il primo ciclo non sarà mai terminato.
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
Bug numero 2 ● Questa è un errore grave: in C le stringhe in
realtà sono puntatori; il buffer usato per memorizzare le parole è sempre lo stesso!
● Quindi nelle celle dell array avremo sempre lo stesso puntatore, che conterrà l'ultima parola che ci abbiamo scritto sopra (“basta”).
● Cosi quando stampiamo le parole ne stampa una serie tutte uguali.
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
Bug numero 3● Oltre alle parole inserite, dentro l'array, vi è
sempre il valore sentinella basta che completa la serie.
● In fase di inserimento bisogna controllare che nell'array non ci finisca il valore sentinella. Oppure cambiare il ciclo 1.
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
Errore stealth...● Non appare su tutti i sistemi...● E' dovuto a qualcosa che lo standard non
definisce...● Provoca un SEGMENTATION FAULT !! (ovvero
accesso a memoria non allocata!)
Tutti i puntatori nell'array NON sono inizializzati a NULL: ciò significa che se non lo fa automaticamente il sistema, andremo a chiamare la free() su puntatori non allocati dinamicamente.
Distributed under GNU Free Documentation License © 2007 Valerio Bruno [O(n)]
www.torlug.org www.cs.uniroma2.it
www.torlug.org