在C中搜索文本文件中的特定行

时间:2015-09-14 13:29:24

标签: c string

我有一个文本文件,我想从这个文本文件中获取一个特定的行。文件内容如下,

<div class="logo_style">
   <img src="/images/Gnome-Network-Wireless-NoTx-64.png">
   <h2>Fast Actions</h2>
</div>
<div class="container">
   <p><b><font color=green>Action "update_frequency" is sent.</font></b></p>
   <br/><a href="/">[Back To Main Section]</a>
</div>
</body></html>

我想只搜索行Action "update_frequency" is sent并将其打印到stdout。我使用了strstr函数但是当我打印strstr给出的指针时,它也给出了所有结束行,它们出现在文本文件中的所需行之后。所以我尝试将返回的指针存储在char *str_result中。然后我复制了str_resultstr_dst的前10个字节,但我得到的结果为segmentation fault (core dumped)。以下是代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main(int argc, char *argv[])
{

    FILE  *file_r;
    char *buffer;
    buffer = malloc (100000);
    char *str_result;
    char str_dst[100];
    file_r= fopen ("file_new.txt", "r");
    fseek (file_r, SEEK_SET, 0);
    while (fgets (buffer, 100000, file_r)!=NULL)
        {
            ;

        }

    str_result = strstr(buffer, "Action");
    memcpy (str_dst, str_result, 10);
    printf("%s\n", str_dst);


    fclose (file_r);
    return 0;
}

任何人都可以建议我如何才能获得所需的文本行而不是strstr所示的其他行?
提前谢谢。

3 个答案:

答案 0 :(得分:3)

memcpy (str_dst, str_result, 10);不插入/添加NULL终止符。

您必须在str_dst[10]='\0';memcpy之间添加printf以避免细分错误

答案 1 :(得分:2)

fgets (buffer, 100000, file_r);
str_result = strstr(buffer, "Action ");//add space
size_t len = strchr(str_result, '<') - str_result;//length upto '<'
memcpy (str_dst, str_result, len);
str_dst[len] = '\0';//null-terminate
printf("%s\n", str_dst);

答案 2 :(得分:0)

将文本文件视为一个充满字符的数组。创建几个整数变量并让它们保持为0.创建一个for循环,如果出现一个特定字母,则其中一个变量等于数组中找到该字符的位置。接下来,想一想另一个特定的角色并重复上述内容,直到找到它为止。让其中一个变量占据它的位置。重复此循环,直到您为字符串中的所有字符测试了数组。接下来,创建一系列测试整数值的if语句,你可以通过获取单词中第二个字母的int位值,从第一个的int位值中减去它,如果它等于1,你就知道了字母2直接出现在字母1之后。这可能看起来令人困惑,并且它不是一个简单的方法,但我希望这有点帮助!