C为什么可以';t my fgets()在单词后面使用时正确读取行\n

C为什么可以';t my fgets()在单词后面使用时正确读取行\n,c,C,这有点难以表达,但我希望我的注释掉的fprintf函数被注释掉,我的另外两个打印函数被注释掉(在我的add_to_white_list函数中) 但是,当我以这种方式写入文件时(单词后面有\n),我的fgets行读取器在remove_from_white_list函数中出现问题。在调试过程中,我的fgets读取第一行,之后似乎为空 这可能会让我很困惑,因为一切都按原样进行,除了文件中的最后一个单词之外,我所有的单词后面都有换行符 void add_to_white_list(char* ip) {

这有点难以表达,但我希望我的注释掉的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");
  }
}
void添加到白名单(char*ip){
文件*fp;
fp=fopen(“../app/whitelist.txt”,“r+”);
如果(!(getc(fp)<0)){
fseek(fp,1,SEEK_END);
fputs(“\n”,fp);
}
fprintf(fp,“%s”,ip);
//fprintf(fp,“%s\n”,ip);
fclose(fp);
}
无效从白名单中删除白名单(字符*ip){
文件*fp;
文件*fp_temp;
fp=fopen(“../app/whitelist.txt”,“r”);
fp_temp=fopen(“../app/temp.txt”,“w+”);
字符buff[255];
int匹配=0;
while(fgets(buff,255,fp)!=NULL){
条纹(浅黄色);
如果(!(strcmp(buff,ip)==0)){
fprintf(fp_temp,“%s\n”,buff);
}否则{
匹配=1;
}
}
fclose(fp);
fclose(fp_温度);
如果(匹配==0){
printf(“请提供当前列在白名单上的ip地址\n”);
}否则{
重命名(“../app/temp.txt”,“./app/whitelist.txt”);
}
}

*我没有包含strip函数,但它删除了\n

这可能无法解决您的问题,但您可以简化
将添加到白名单中

void add_to_white_list(char* ip) {
   FILE *fp = fopen("../app/whitelist.txt", "a");
   if ( fp != NULL )
   {
      fprintf(fp, "%s\n", ip);
      fclose(fp);
   }
}

这可能无法解决您的问题,但您可以简化
将\u添加到\u白名单中

void add_to_white_list(char* ip) {
   FILE *fp = fopen("../app/whitelist.txt", "a");
   if ( fp != NULL )
   {
      fprintf(fp, "%s\n", ip);
      fclose(fp);
   }
}

“这有点难以表达”。请提供准确的输入、预期输出和实际输出。您可能需要阅读。并确保在问题中添加
strip
功能。告诉我们你在换行上遇到了问题,却不给我们展示一个处理换行的函数,这是很愚蠢的。请提供准确的输入、预期输出和实际输出。您可能需要阅读。并确保在问题中添加
strip
功能。告诉我们你的换行符有问题,然后不给我们显示一个处理换行符的函数,这是很愚蠢的。非常感谢附加模式“a”正是我一开始想要做的。我正在创建自己的附加模式。似乎也解决了这个问题!非常感谢附加模式“a”正是我一开始想要做的。我正在创建自己的附加模式。似乎也解决了这个问题!