C语言 如何检查一个字符串是否包含一个围绕任何文本的子字符串[关闭]

hmmo2u0o  于 2023-10-15  发布在  其他
关注(0)|答案(1)|浏览(67)

已关闭,此问题需要details or clarity。它目前不接受回答。
**想改善这个问题吗?**通过editing this post添加详细信息并澄清问题。

17小时前关闭
Improve this question
我在将main函数像fun main() {}一样 Package 在我的代码中时遇到了麻烦。有人能提供如何实现这一目标的指导吗?下面是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "include/acc.h"

/*
    Reference powersoft's IR
        fun - i17
        char - ch17
        const - cst17
        @return - rted17
        @if - if17
*/

/*
    Find matches let's you find matches
*/
int find_matches(const char *str, const char *spec1, const char *spec2, size_t *offsets) {
    const char *p1 = strstr(str, spec1);
    if (p1 == NULL)
        return 0;
    const char *p2 = p1 + strlen(spec1);
    const char *p3 = strstr(p2, spec2);
    if (p3 == NULL)
        return 0;
    const char *p4 = p3 + strlen(spec2);
    offsets[0] = p1 - str;
    offsets[1] = p2 - str;
    offsets[2] = p3 - str;
    offsets[3] = p4 - str;
    return 1;
}

int main(int argc, char const *argv[]) {
    double LV = 0.1;

    if (argc != 2) {
        printf(BLU "Powersoft \xF0\x9F\x9A\x80\n" reset);
        printf("version %f\n", LV);
        return 1;
    }

    FILE *fp;
    fp = fopen(argv[1], "r");

    char FS[100];
    int lineno = 0;
    if (fp != NULL) {
        while (fgets(FS, sizeof FS, fp)) {
            const char *p = FS;
            size_t off[4];
            lineno++;
            while (find_matches(p, "mode", ";", off)) {
                printf("%s:%d: found match: %.*s\n", argv[1], lineno,
                       (int)(off[3] - off[0]), p + off[0]);
                printf("%s:%d: substring: %.*s\n", argv[1], lineno,
                       (int)(off[2] - off[1]), p + off[1]);
                p += off[3];

                FILE *fp2;
                fp2 = fopen("app.pslir", "w");
                fprintf(fp2, "");
                free(fp2);
            }
        }
    } else {
        printf(BRED "Can't find file %s. Try again.\n" reset, argv[1]);
        return 1;
    }

    fclose(fp);
    // Remove cache file
    remove("matches.txt");
    return 0;
}

我试着用find_matches
谢谢你,谢谢!

6kkfgxo0

6kkfgxo01#

你没有说明代码中的错误,但至少有一个主要错误:

free(fp2);

你应该调用fclose(fp2)来关闭流,而不是free()free()只应该被调用来处理malloc()和类似的堆分配函数返回的内存块。
同样不清楚的是,您试图通过fprintf(fp2, "")实现什么。此函数调用不会向文件app.pslir中生成任何输出,该文件是由带有"w"参数的fopen()调用创建或截断的。您可能希望使用"a"以追加模式打开文件,并输出匹配的行或模式。

相关问题