2015-02-10 159 views
1

我正在使用fgets()和字符数组的缓冲区,因为我正在逐行处理文件。如果遇到新行,缓冲区数组是否包含字符'\n'处于最后位置?检查字符串是否包含新行字符

请问fgets()是否在缓冲区中存放'\n'当一个文件开始换行时?如果不是,我该如何检查它们?

回答

2

是的。 fgets()扫描并将尾部\n存储在目标缓冲区中(如果源中存在)。

引述手册页,

读取EOF或换行后停止。如果读取换行符,则将其存储到缓冲区中。

因此,要回答你的查询

检查字符串包含换行字符[...]当一个文件启动一个新行

你可以这样做,无论是

  • strchr()\n检查输入行是否包含\n任意位置
  • 检查buffer[0] == '\n'仅用于起始字节[文件开始新行 case]。
+0

两个独立的案件一下子陷入与线'如果(缓冲[strlen的(缓冲)-1] ..' – usr2564301 2015-02-10 11:07:11

0

fgets()不读'\n'字符,如果它存在,删除它,你可以做到这一点

char buffer[SIZE_OF_BUFFER]; 
size_t length; 

/* * we assume that file is a valid 'FILE *' instance */ 

length = sizeof(buffer); 
if (fgets(buffer, length, file) != NULL) 
{ 
    length = strlen(buffer); 
    if (buffer[length - 1] == '\n') 
     buffer[--length] = '\0'; 
} 

这是什么做的是检查是否'\n'出现在字符串的结尾,然后更换它由nul终止。

0
char a[100]; 
size_t n; 

fgets(a, sizeof(a),stdin); 

n = strlen(a); 
if (n > 0 && a[n - 1] == '\n') 
    a[n-1] = '\0'; 

您可以检查是否有缓冲换行符,如上图所示,并通过与\0

+0

如果我雇佣你在我公司我不会因为你的编码风格,而不是你的技能,他们没问题,当然我还没有公司。 – 2015-02-10 10:48:11

+0

@iharob请考虑我的技能,因为我通常使用vim编辑器来编写代码,写完之后所有的代码,只是我'''和'%'缩进我的整个代码...请考虑我的技能:) :) – Gopi 2015-02-10 10:49:33

+0

你不应该让你的编辑器缩进你的代码。 – 2015-02-10 10:51:05

0

是它取代换行符压制它。如果遇到它,它会在行尾添加'\n'。 如果你想摆脱它,比较数组索引,并根据需要替换它使用以下。 (改变'\0'根据自己的需要)

if (arrayname[index] == '\n') 
    arrayname[index]='\0'; 
相关问题