1 /* 2 * mem3.c 3 * klin, Wed Dec 17 15:08:57 1997 4 * Pufferueberlauf 5 */ 6 7 #include <stdio.h> 8 #include <string.h> 9 #include <ctype.h> 10 11 #define N 4 12 #define M 8 13 #define byte unsigned char 14 15 void puthex(byte *, int); 16 17 void main(void) 18 { 19 char *s = "Dummystring"; 20 int i, j, k; 21 char a4[N][M]; 22 23 printf("Pufferueberlauf\n\n"); 24 25 printf("s=%p a4=%p i=%p j=%p k=%p\n", &s, &a4, &i, &j, &k); 26 printf("a4 a = %p/%p s = %d\n", a4, &a4, sizeof(a4)); 27 puthex((byte *) a4, sizeof(a4)); 28 for (i = 0; i < N; i++) 29 printf("a4(%d) = %p/%p\n", i, a4[i], &a4[i]); 30 31 strcpy(a4[0], "Dieser String ist viel zu lang! XXXXYYYY"); 32 printf("i=%p/%p j=%p/%p k=%p/%p\n", i, &i, j, &j, k, &k); 33 puthex((byte *) a4, sizeof(a4)+3*sizeof(int)); 34 for (i = 0; i < N; i++) 35 printf("a4(%d) = %p/%p \"%s\"\n", i, a4[i], &a4[i], a4[i]); 36 37 } /* main() */ 38 39 void puthex(byte *s, int n) 40 { 41 int i; 42 43 for (i = 0; i < n; i++) { 44 printf("%02x", s[i]); 45 } 46 printf("\n"); 47 for (i = 0; i < n; i++) { 48 printf("%2c", isprint(s[i]) ? s[i] : '.'); 49 } 50 printf("\n"); 51 52 } /* puthex() */