我想将电子邮件的主题内容分成一个文本文件,其他头部字段放入下一个文本文件,最后将邮件正文放入另一个文本文件中。我的代码可以提取具有单行内容的电子邮件字段。但它不提取,如果该字段有多个行(这是必需的,因为诸如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