解析字符串C

解析字符串C,c,string,parsing,space,C,String,Parsing,Space,我正试图从电子邮件中获取正文,但我不知道如何获取。正文和标题之间用空格隔开。你能给我举几个例子吗 谢谢 邮件的标题和正文如下所示: From username@localhost Fri May 13 12:28:30 2010 Return-Path: <username@localhost> X-Original-To: recipe@localhost Delivered-To: recipe@localhost Received: from cristi?localhost

我正试图从电子邮件中获取正文,但我不知道如何获取。正文和标题之间用空格隔开。你能给我举几个例子吗

谢谢

邮件的标题和正文如下所示:

From username@localhost  Fri May 13 12:28:30 2010
Return-Path: <username@localhost>
X-Original-To: recipe@localhost
Delivered-To: recipe@localhost
Received: from cristi?localhost (localhost [127.0.0.1])
by Notebook (Postfix) with SMTP id 50F6F809E0
for <test@localhost>; Fri, 13 May 2010 12:28:30 +0300 (EEST)
Message-Id: <20110513092830.50F6F809E0@Cristi-Notebook>
Date: Fri, 13 May 2010 12:28:30 +0300 (EEST)
From: username@localhost
To: undisclosed-recipients:;

Text Body

.

找到流行的RFC。阅读说明书


我没有读过POP,但我读过SMTP。在SMTP中,我想我记得头以\r\n\r\n结尾,正文也是如此。也许POP也是一样。

如果我理解正确,身体被一条换行线隔开,所以我们可以保留一个变量,告诉我们是否已经遇到了那条换行线。在这种情况下,请复制文本,否则请检查我们是否已到达文本

bool foundBody = false;
char *bodyBegin = "\r\n\r\n";
int i = 0,j = 0, k = 0;

while(bufferReceived[i]) {
    if(foundBody)
        body[j++] = bufferReceived[i];
    else {
        if(bufferReceived[i] == bodyBegin[k])
            foundBody = bodyBegin[k++] == '\0';
        else
            k = 0;
    }

    i += 1;
}

body[j] = '\0';

你把事情弄得太复杂了。您的身体启动ifstrnstrbuffer\r\n\r\n,sizeofbuffer!=无效的现在,您只需对缓冲区在序列中拆分时存在的4个异常进行编码\r\n\r\n即可


另一种方法是执行行读取,直到读取为止,\r\n然后转到正文的缓冲区。这是最好的选择,因为您可以更轻松地存储标题值,并且行读取与较大缓冲区的开销可以忽略不计。

请澄清您的问题:给出一封电子邮件示例。你说用空格隔开是什么意思?那是行空格吗?谢谢你的回答,但我还是有问题。基本上我想做的是提取消息的主体。。。只是邮件里的文字。电子邮件存储在缓冲区中。
bool foundBody = false;
char *bodyBegin = "\r\n\r\n";
int i = 0,j = 0, k = 0;

while(bufferReceived[i]) {
    if(foundBody)
        body[j++] = bufferReceived[i];
    else {
        if(bufferReceived[i] == bodyBegin[k])
            foundBody = bodyBegin[k++] == '\0';
        else
            k = 0;
    }

    i += 1;
}

body[j] = '\0';