我想將電子郵件的主題內容分成一個文本文件,其他頭部字段放入下一個文本文件,最後將郵件正文放入另一個文本文件中。我的代碼可以提取具有單行內容的電子郵件字段。但它不提取,如果該字段有多個行(這是必需的,因爲諸如Subject,To等的字段可能有多行)。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/SUBJECT $ ./a.out 8.txt f.txt g.txt h.txt 分割故障(核心轉儲)
'#包括'以使用'免費()'' –
2014-09-30 09:42:11
是buf1'從未被分配過,但你打電話'的strcpy(BUF1,BUF);' – 2014-09-30 09:57:12