使用'/ n'从文本文件中读取

Hal*_*low 1 c string printf newline

好的.所以我正在阅读并将文本文件中的文本存储到char数组中,这是按预期工作的.但是,文本文件包含许多换行符转义序列.那么问题是,当我用存储的文本打印出字符串数组时,它会忽略这些换行序列并简单地将它们打印为"\n".

这是我的代码:

char *strings[100];

void readAndStore(FILE *file) {
  int count = 0;
  char buffer[250];

  while(!feof(file)) {
    char *readLine = fgets(buffer, sizeof(buffer), file);
    if(readLine) {
      strings[count] = malloc(sizeof(buffer));
      strcpy(strings[count], buffer);
      ++count;
    }

  }
}

int main() {

  FILE *file1 = fopen("txts", "r");
  readAndStore(&*file1);
  printf("%s\n", strings[0]);
  printf("%s\n", strings[1]);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出变成这样的:

这里有很多文字\n更多应该在新行上的文字,但不是\n因此\n on和on \n \n

有没有办法让它读取"\n"作为实际的换行符转义序列,或者我只是需要从我的文本文件中删除它们并找出一些其他方法来分隔我的文本?

Ste*_*ppo 5

不.事实上,这\n是编译器的一个特殊转义序列,它将其转换为单个字符文字,即"LF"(换行,返回),具有ASCII码0x0A.因此,编译器为该序列赋予了特殊含义.

相反,当从文件\n读取时,读取为两个不同的字符,ASCII码0x5c,0x6e.

您将需要编写一个例程来替换所有出现的\\n(由字符\和n组成的字符串,双重转义是必要的,以告诉编译器不要将其解释为转义序列)\n(单个转义序列,意味着新行) ).