使用fgets()在struct中写入空行

使用fgets()在struct中写入空行,c,C,读取文件时,我也想读取其空行,但它不工作: while(fgets(line, 25, file) != NULL) { sscanf(line, "%s", fooStruct.text); } 是否有其他方法可以从文本中读取空行?如果该行为空,则sscanf将返回0,表示没有成功完成的转换。在这种情况下,您可以将文本设置为空字符串 while(fgets(line, 25, file) != NULL) { if ( sscanf(line, "%s", fooStruct.

读取文件时,我也想读取其空行,但它不工作:

while(fgets(line, 25, file) != NULL) {
   sscanf(line, "%s", fooStruct.text);
}

是否有其他方法可以从文本中读取空行?

如果该行为空,则
sscanf
将返回0,表示没有成功完成的转换。在这种情况下,您可以将
文本设置为空字符串

while(fgets(line, 25, file) != NULL) {
    if ( sscanf(line, "%s", fooStruct.text) != 1 )
        fooStruct.text[0] = '\0';   // sscanf failed, must be a blank line
}

另一种方式。。。像使用
getc()
逐个读取字符一样,计算
行中的字符串长度
如果为1,则表示它只读取
换行字符
,然后,您可以在文件中适当地添加
换行符
,以表示空行。如果您不想只在
fooStruct.txt
中存储一个单词,而是想存储整行,那么以下操作也可以使用:
while(fgets(fooStruct.txt,25,file)!=NULL){}<代码>,将包含空白行。调用<代码> fgScript()<代码> >读取空白行就行了。生成的缓冲区
将包含:
\n'\0'。但是,使用“%s”格式说明符调用
sscanf()`将不会输入“\n”,因此
fooStruct.text
将只接收由
sscanf()
函数附加的“\0”。我的理解是,使用“%s”格式说明符的sscanf()将始终附加NUL字节,因此,无需专门插入NUL字节。@user3629249只有当
sscanf
成功时,才需要这样做。当
sscanf
失败时,如此处所示,输出缓冲区不会被修改,并且包含它开始时使用的任何垃圾。