【发布时间】:2019-08-24 18:26:02
【问题描述】:
在我的代码中,我有一个名为“f1.txt”的文件,该文件中的文本是一个字符串“robin singh hero”
我创建了一个大小为 [10] 的字符串 [b]str[/b] 和一个 FILE 类型指针变量 *fp,然后从 fopen 函数为这个指针分配了我的文件“f1.txt”的地址。
然后我使用了 fgets 函数,它接受这三个参数(字符串、大小、文件指针)
#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,所以这意味着 fgets 将从我的文件中读取前八个字符(robin sin)并将其存储到大小为 10 的字符串中,并且在我的字符串中还剩下 2 个字节的空间。然后直到我的文件达到空值,它会复制接下来的 8 个字符(gh hero)。
所以我想知道这个: 1.现在还有6个字符,但实际结果是(robin singh hero)
当只剩下 6 个字符时,第二步发生了什么。
我想知道在这个 while 循环结束后我的字符串 str 发生了什么。所以我做了 puts(str) 并且我在终端中得到了这个值 (ro)。
下面是这段代码的实际结果: 罗宾辛格英雄
罗
罗
【问题讨论】:
-
关于:
printf("File does not exists");这不是(必然)正确的。建议:perror( "fopen failed" ),因为这会将您的错误消息和系统认为发生错误的文本原因输出到stderr
标签: c pointers file-handling fgets