void read_entries() {
int count = 0;
for (int i = 0; i < top; i++) {
FILE *fp;
fp = fopen(File_List[i], "r");
char buff[1024];
while (fgets(buff, 1024, fp) != NULL) {
if (good_data(buff)) {
count++;
}
}
fclose(fp);
}
}
int good_data(char* buff) {
char *ip;
ip = strtok (buff, " ");
ip = strtok (NULL, " ");
ip = strtok (NULL, " ");
ip = strtok (ip, ":");
printf("IP below\n");
printf("%s\n", ip);
//strcmp(ip, "69.12.26.238");
return 0;
}
我有这个功能,解析一条线,并抓住它的IP。当我按照以下步骤进行打印时,完全如我所料。但是,如果我尝试将该ip传递给函数,则会出现分段错误。即使通过在我的printf行下面有一个函数,printf也会为ip值输出null。这怎么可能?我能做些什么才能使用ip值?C strtok工作,如果我尝试打印值,但分段错误,如果我试图通过值为空
如果您显示了几条样本行数据(可能是“word1 word2 machine.example.com 69.12.26.238:80”或类似的东西),这将是明智的。另外,你的'read_entries()'函数依赖于一些全局变量;将代码分解,可以改善代码的分解。这将有助于使MCVE([MCVE])更简单。 'good_data()'函数使用全局变量'ip',而不使用局部变量'p',这也是令人费解的。 –
@JonathanLeffler这件事肯定是一个错字。 –
@ Jean-FrançoisFabre:可能,但是copy'n'paste是如何失败的?显示非编译代码并不是一个特别好的主意 - 我给出了慈善解释(它编译是因为有一个全局变量使它起作用),但是在SO的问题中,既没有定义的全局错误也没有错别字是一个好主意。 –