从C中读取文件时忽略\ n?

时间:2016-12-10 21:20:19

标签: c file

我想知道在阅读文件时是否可以忽略新行。我写了一个小程序,它从文件中读取字符并对它们进行格式化,但是文档中的新行会弄乱格式化,最后我会得到双倍空格,我只需要一个间距。

是否可以禁用此功能?所以我的程序打印出的唯一新行是我在程序中插入打印函数的新行?

1 个答案:

答案 0 :(得分:3)

C并不提供方便性,您必须自己提供或使用第三方库,例如GLib。如果您是C的新手,请习惯它。您正在非常接近裸 metal 芯片。

通常你会逐行读取一个文件fgets()或我的偏好POSIX getline(),并通过查看最后一个索引并将其替换为空来删除最终换行符(如果它是&#39) ;换行。

#include <string.h>
#include <stdio.h>

char *line = NULL;
size_t line_capacity = 0; /* getline() will allocate line memory */

while( getline( &line, &line_capacity, fp ) > 0 ) {
    size_t last_idx = strlen(line) - 1;

    if( line[last_idx] == '\n' ) {
        line[last_idx] = '\0';
    }

    /* No double newline */
    puts(line);
}

为方便起见,您可以将其放入一个小功能中。在许多语言中,它被称为chomp

#include <stdbool.h>
#include <string.h>

bool chomp( char *str ) {
    size_t len = strlen(str);

    /* Empty string */
    if( len == 0 ) {
        return false;
    }

    size_t last_idx = len - 1;
    if( str[last_idx] == '\n' ) {
        srt[last_idx] = '\0';
        return true;
    }
    else {
        return false;
    }
}

您自己实施fgetsgetline以了解文件中的阅读行是如何实际运作的,这对您有所帮助。