/* paragrafo 1.9 pagina 27 visualizza la lunghezza di righe arbitrariamente lunghe e ne mostra la maggior parte possibile */ #include <stdio.h> #define MAXLINE 40 int getline(char line[], int maxline); void copy(char to[], char from[]); int main() { int i; int len; int lung; char line[MAXLINE]; char text[MAXLINE]; lung = 0; printf("Dimensione buffer:%3d\n", MAXLINE); while ((len = getline(line, MAXLINE)) > 0) { lung = lung + len; if (lung <= MAXLINE - 1) copy(text, line); if (line[len - 1] == '\n') { printf("%3d caratteri: %s", lung, text); if (lung > len) putchar('\n'); lung = 0; } } if (lung > 0) printf("%3d caratteri: %s\n", lung, text); return 0; } /* getline: legge una riga in ingresso, la assegna a s, ne restituisce la lunghezza */ int getline(char s[], int lim) { int c, i; for (i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; ++i) { s[i] = c; } if (c == '\n') { s[i] = c; ++i; } s[i] = '\0'; return i; } /* copy: copia la stringa 'from' sulla stringa 'to'; assume che 'to' sia sufficientemente lunga */ void copy(char to[], char from[]) { int i; i = 0; while ((to[i] = from[i]) != '\0') ++i; }