Codice dei programmi nella directory:
///File: BucaWinMe.c
//Autore:F. Sacco
//Breve descrizione del programma: ATTACCO fuori segmento al OS
#include <stdio.h>
int main()
{
char *p; // definizione di un puntatore a carattere
p= 0; // p punta all'indirizzo zero di RAM
while(1) // sempre vero
{
*p=0; // Tenta di Azzerare una cella (un carattere o byte) di memoria
// questa istruzione genera un SEGMENTATION VIOLATION ed l'OS elimina
// il programma in esecuzione (o processo)
// NB: fino a Windows me (anno 2000) questo tipo di istruzioni NON
// venivano controllate ed il programma faceva cadere tutto il sistema operativo
p++; // al prossimo giro azzera cella di RAM successiva
}
return 0; // qui NON ci arriva mai!
}
///(Fine file: BucaWinMe.c)
///File: strlen.c
//Autore:XXXX - Data ultima modifica DD/MM/AA
//Breve descrizione del programma: programma vuoto
#include<stdio.h>
//#include <string.h>
int strlen1(char s[])
{
int i;
for(i=0; s[i]; i++)
;
return i;
}
int strlen2(char *s)
{
char *p=s;
while(*p!='\0')
p++;
return p-s;
}
int main()
{
char s[]="ciao";
printf("%d\n",strlen1(s));
printf("%d\n",strlen2(s));
return 0;
}
///(Fine file: strlen.c)
///File: strup.c
// riscrivi con puntatori le funzioni di pag. 28 di LucidiC.pdf
#include<stdio.h>
void scrivi(char *s)
{
for(; *s!='\0'; s++)
putchar(*s);
}
void str_up(char *s)
/* converte in maiuscolo s */
{
for(; *s!='\0'; s++)
if ( *s >= 'a' && *s <= 'z' )
*s -= 32;
}
int main()
{
char s[80+1];
printf("Stringa->");
gets(s);
str_up(s);
printf("Stringa->");
scrivi(s);
return 0;
}
///(Fine file: strup.c)
///File: Leggimi.txt
Vedi anche il file "RipassoPuntatori.pdf" nella cartella Lezioni
///(Fine file: Leggimi.txt)
///File: EsercizioPuntatoreMatrice.txt
Gioco con i pointer.
Una matrice e' memorizzata in memoria per righe ad indirizzi consecutivi.
1) Definire una matrice di 10 X 10 int
2) Definire un puntatore p al primo elemento della matrice.
3) Inserire i valori da 1 a cento nella matrice, usando solo il puntatore p
3.1) Visualizzare la matrice
4) Scrivere su file la matrice al rovescio utilizzando sempre il puntatore p
#define MAX 10
int m[MAX][MAX];
int *p=&m[0][0]; // p punta al primo elemento della matrice
int i,j;
for(i=0; i < MAX*MAX; i++) // metto elementi nella matrice
*p++=i+1;
for(i=0; i < MAX; i++) // visualizzo la matrice
{
for(j=0; j < MAX; j++)
printf("%3d ",m[i][j]);
printf("\n");
}
FILE *fd=fopen("matrice.txt","w");
p--;
int i=0; // per invio nel file
while(p >= &m[0][0]);
{
fprintf(fd,*p--);
i++;
if (i %10 == 0)
fprintf(fd,"\n");
}
///(Fine file: EsercizioPuntatoreMatrice.txt)