已关闭,此问题需要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
谢谢你,谢谢!
1条答案
按热度按时间6kkfgxo01#
你没有说明代码中的错误,但至少有一个主要错误:
你应该调用
fclose(fp2)
来关闭流,而不是free()
,free()
只应该被调用来处理malloc()
和类似的堆分配函数返回的内存块。同样不清楚的是,您试图通过
fprintf(fp2, "")
实现什么。此函数调用不会向文件app.pslir中生成任何输出,该文件是由带有"w"
参数的fopen()
调用创建或截断的。您可能希望使用"a"
以追加模式打开文件,并输出匹配的行或模式。