gpt4 book ai didi

C 为什么我的 fgets() 在用\n 写字时不能正确读取行

转载 作者:太空宇宙 更新时间:2023-11-04 08:10:43 25 4
gpt4 key购买 nike

这有点难以表达,但我想要的是我注释掉的 fprintf 函数被注释掉,我的其他两个打印函数被注释掉(在我的 add_to_white_list 函数中)。

但是,当我以这种方式写入文件时(在单词后面加上\n),我的 fgets 行阅读器在 remove_from_white_list 函数中出现了问题。在调试过程中,我的 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);
}
}

关于C 为什么我的 fgets() 在用\n 写字时不能正确读取行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39761036/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com