Я хочу разделить тематическое содержание письма в один текстовый файл, другие поля заголовка в следующий текстовый файл, наконец, тело сообщения в другой текстовый файл. Мой код может извлекать поля электронной почты с одной строкой content.but он не извлекается, если поле имеет более одной строки. (Это необходимо, потому что такие поля, как Subject, To an и так далее, могут иметь несколько строк.) plz help me ... Мой код приведен ниже:категоризация содержимого электронной почты
названиепрограммы: f2all.c
# include <stdio.h>
# include <string.h>
int main (int argc, char **argv) {
if (argc < 5) {
fprintf (stderr, "Error: insufficient input. Usage: %s input_file output_file\n",
argv[0]);
return 1;
}
FILE *ifp = fopen(argv[1],"r");
FILE *ofp1 = fopen(argv[2],"w");/*this points to a file(eg:f.txt),which should contain`contents of subject field only*/
FILE *ofp2= fopen(argv[3],"w");/*this points to a file(eg:g.txt),which should contain contents of all other other header field only*/
FILE *ofp3= fopen(argv[4],"w");/*this points to a file(eg:h.txt),which should contain contents of message body only*/
char *buf = NULL;
char *buf1 = NULL; /* forces getline to allocate space for buf */
ssize_t read = 0;
size_t n = 0;
char *ptr = NULL;
if (ifp==NULL)
{
printf("\nFile cannot be opened\n");
return 1;
}
else
{
while ((read = getline (&buf, &n, ifp)) != -1)
{
if (((ptr=strstr(buf,"Subject:")) != 0))
{
fprintf(ofp1,"%s",(ptr+8)); /* use (ptr + 8) to trim 'Subject:` away */
}
if ((ptr=strstr(buf,"subject :")) != 0)
{
fprintf(ofp1,"%s",(ptr+9));
}
if (((ptr=strstr(buf,"Date:")) != 0)||((ptr=strstr(buf,"From:")) != 0)||((ptr=strstr(buf,"X-cc:")) != 0))
{
fprintf(ofp2,"%s",(ptr+5));
}
if ((ptr=strstr(buf,"X-To:")) != 0)
{
fprintf(ofp2,"%s",(ptr+5));
}
else
{
strcpy(buf1,buf);
fprintf(ofp1,"%s",buf1);
}
}
}
if (buf) /* free memory allocated by getline for buf */
free (buf);
fclose(ofp1);
fclose(ofp2);
fclose(ofp3);
fclose(ifp);
return 0;
}
Я сделал компиляцию, а затем запустить программу следующим образом:
princy @ PRINCY: ~/minipjt/SUBJECT $ cc f2all.c f2all.c: В функции 'main': f2all.c: 85: 9: warning: несовместимое неявное объявление встроенной функции 'free' [по умолчанию включено] princy @ PRINCY: ~/minipjt/ПРЕДМЕТ $ ./a.out 8.txt f.txt g.txt h.txt вина Сегментация (ядро сбрасывали)
'#include' для того, чтобы использовать 'свободный()' ' –
buf1' никогда не выделяется, но вы называете' STRCPY (Buf1, БУФ); ' –