首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在此代码中工作的c文件fget函数

在此代码中工作的c文件fget函数
EN

Stack Overflow用户
提问于 2019-08-24 18:26:02
回答 1查看 129关注 0票数 1

在我的代码中,我有一个名为"f1.txt“的文件,该文件中的文本是一个字符串"robin英雄”

我已经创建了一个大小为10的字符串bstr/b和一个文件类型指针变量*fp,然后从fopen函数为这个指针分配我的文件的地址"f1.txt“。

然后我使用了fget函数,它接受这三个参数(字符串、大小、文件指针)。

代码语言:javascript
复制
#include <stdio.h>

void main()
{
  char str[10];
  FILE *fp;

  fp = fopen("f1.txt","r");

  if(fp == NULL)
  {
  printf("File does not exists");
  exit(1);
  }

  while (fgets(str,8,fp)!=NULL){
    printf("%s",str);
  }
  printf("\n");
  fclose(fp);
  puts(str);
  puts(str);
}

我提到了8大小,因此它意味着fget将从我的文件中读取前8个字符(robin ),并将其存储到我的字符串中,该字符串的大小为10,剩下的空间仍为2字节。然后,直到我的文件达到空,它复制接下来的8个字符(高英雄)。

所以我想知道: 1.现在还有6个字符,但实际结果是(罗宾·辛格英雄)

  1. 当只剩下6个字符时,在第二步中发生了什么。
  2. 我想知道这个while循环结束后我的字符串str发生了什么变化。所以我把(Str)和这个值(ro)放进了终端。

下面是代码的实际结果: robin英雄

ro

ro

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-24 18:43:57

正如您在文件f1.txt包含以下内容的问题中指出的那样

代码语言:javascript
复制
robin singh hero

现在当下面的代码被执行时

代码语言:javascript
复制
while (fgets(str,8,fp)!=NULL){
    printf("%s",str);
}

fgets()fp指向的文件中读取大小减去一个字符,即7字符,并存储在str中。因此,在第一次迭代中,printf()语句会打印

代码语言:javascript
复制
robin s

然后在第二次迭代中,它再次尝试读取7字符,即printf()语句打印

代码语言:javascript
复制
ingh he

然后再试着读取7字符,但是只有3字符(如果是\n ),所以printf()语句会打印出来。

代码语言:javascript
复制
ro

下面的代码段

代码语言:javascript
复制
printf("\n"); /* prints \n character on console */
fclose(fp); /* closes the file */
puts(str); /* when above while loop terminates str has ro in it, hence it prints ro on console */
puts(str); /* prints ro on console */

由于您已经调用了puts()两次,所以它会打印ro两次。

来自fgets()的手册页

fgets()从流中读取最多小于大小的字符,并将它们存储到由s指向的缓冲区中。读取在EOF或换行符之后停止。如果读取换行符,则将其存储到缓冲区中。在缓冲区中的最后一个字符之后存储终止空字节(aq\0aq)。

还请注意,void main() {}不是标准的main()原型。你应该用

代码语言:javascript
复制
int main(void) {

   return 0;
}

C标准5.1.2.2.1程序启动

1在程序启动时调用的函数名为main。该实现没有声明此函数的原型。它应定义为返回类型int,且不带参数: (空){/*.*/} 或 有两个参数(这里称为argcargv,但可以使用任何名称,因为它们是声明它们的函数的本地名称): int main(int argc,char *argv[]) {/*.*/}

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57640567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档