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的問題中,既沒有定義的全局錯誤也沒有錯別字是一個好主意。 –