这有点难以表达,但我希望我的已注释掉的fprintf函数被注释掉,另外两个打印函数被注释掉(在add_to_white_list函数中)。
但是,当我以这种方式(用单词后面的\n)写入文件时,在remove_from_white_list函数中的fgets行读取器出现问题。在调试过程中,fgets读取第一行,之后似乎是空白的。
这可能会让我很困惑,因为所有的东西基本上都是按原样工作的,除了文件中的最后一个单词外,所有单词后面都还有换行符。
void add_to_white_list(char* ip) {
FILE *fp;
fp = fopen("../app/whitelist.txt", "r+");
if (!(getc(fp) < 0)) {
fseek(fp, 1, SEEK_END);
fputs("\n", fp);
}
fprintf(fp, "%s", ip);
//fprintf(fp, "%s\n", ip);
fclose(fp);
}
void remove_from_white_list(char* ip) {
FILE *fp;
FILE *fp_temp;
fp = fopen("../app/whitelist.txt", "r");
fp_temp = fopen("../app/temp.txt", "w+");
char buff[255];
int matched = 0;
while (fgets(buff, 255, fp) != NULL) {
strip(buff);
if (!(strcmp(buff, ip) == 0)) {
fprintf(fp_temp, "%s\n", buff);
} else {
matched = 1;
}
}
fclose(fp);
fclose(fp_temp);
if (matched == 0) {
printf("Please supply an ip address that is currently listed on the whitelist\n");
} else {
rename("../app/temp.txt", "../app/whitelist.txt");
}
}
*我没有包含strip函数,但它删除了\n
最佳答案
这可能无法解决您的问题,但您可以将add_to_white_list
简化为:
void add_to_white_list(char* ip) {
FILE *fp = fopen("../app/whitelist.txt", "a");
if ( fp != NULL )
{
fprintf(fp, "%s\n", ip);
fclose(fp);
}
}