Codice: Seleziona tutto
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define MAX 4
main(int argc, char *argv[])
{
FILE *f;
char *s;
char *v[MAX - 1];
f = fopen(argv[1], "r");
s = malloc(2000);
char *p = s;
int i, c;
c = getc(f);
char newline, comment, word;
newline = comment = word = i = 0;
while (c = getc(f))
{
if (c == '#')
{
if (newline)
comment = 1;
continue;
}
if (newline = (c == '\n'))
{
if (comment)
comment = 0;
if (word)
{
word = 0;
*p++ = '\0';
if (i == MAX)
break;
}
continue;
}
if (comment)
continue;
if (isspace(c))
{
if (word)
{
word = 0;
*p++ = '\0';
if (i == MAX)
break;
}
continue;
}
if (isalnum(c))
{
if (! word)
{
v[++i -1] = p;
word = 1;
}
*p++ = c;
}
}
for (i = 0; i < MAX; i++)
puts(v[i]);
}Codice: Seleziona tutto
$ cat prova
fadfa
# fadfadfadfadfada
#
ahdahr
gadg dagad
$ a.out prova
zsh: segmentation fault a.out provaCom'è possibile che getc() faccia terminare il programma?
Grazie

