确定文件是否在C中包含字符串

时间:2018-06-27 18:02:07

标签: c string file-processing word-processor

如何检查给定的FILE*是否包含在Linux上运行的C语言中的字符串(如果重要)?

字符串必须包含其所在的整行。例如,这:

jfjfkjj
string
jfjkfjk

将是真实的;但这:

jffjknf
fklm...string...lflj
jfjkfnj

不会。我本质上是在寻找system("grep -x file")

的内部替代品

1 个答案:

答案 0 :(得分:0)

这将逐行读取文件,并在每次读取后检查该行是否与参数1(argv[1])中提供的字符串匹配。如果是这样,它将布尔infile(在<stdbool.h>中定义的布尔值)设置为true。

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

int main(int argc, char **argv[]) {
    char    *filepath = "/path/to/file";
    bool    infile = false;
    char    *line = NULL;
    size_t  len = 0;
    ssize_t read;

    FILE    *fp = fopen(filepath, "r");

    if (!fp) {
        fprintf(stderr, "Failed to open %s\n", filepath);
        return 1;
    }

    while ((read = getline(&line, &len, fp)) != -1) {
        line[strcspn(line, "\n")] = 0;
        if (!strcmp(line, argv[1])) {
            infile = true;
            break;
        }
    }
    fclose(uuidfp);

    if (line)
        free(line);

    return 0;
}