标准 IO fgets与fputs 对文件的操作
char *fgets(char *s, int size, FILE *stream);
int fputs(const char *s, FILE *stream);
使用fgets从流中读取数据时会在存放的缓冲区中自动添加 '\0' 结尾
例如:
#include <stdio.h> int main(int argc, const char *argv[]) { FILE *fp = NULL; fp = fopen(argv[1],"r"); if(fp == NULL ) { perror("open fail : "); return -1; } char buf[10] = {0}; fgets(buf,5,fp); //每次在打开文本流中读取5个字节,但是只会获取到4个,会在buf的第5个位置添加 '\0' ; printf("buf = %s\n",buf); fclose(fp); return 0; }
测试
使用 fgets 当读取的这一行不满足5个字符时,如现在这行只有 ab 函数会把这一行的 '\n' 也读取到在 buf的存储 {'a', 'b', '\n', '\0'};是字符串的形式
根据fgets 就可以实现获取文件有多少行内容了
#include <stdio.h> #include <string.h> int main(int argc, const char *argv[]) { FILE *fp = NULL; fp = fopen(argv[1],"r"); char buf[20] = {0}; int line = 0; while(1) { if(fgets(buf,10,fp) == NULL ) //fgets返回读取的内容,失败返回NULL,就是美都区到内容 { break; } else if(buf[strlen(buf)-1] == '\n')// strlen求buf中字符串长度,不包含'\0'( 其实fgets读取的内容末尾是有'\0'的 ), { // -1 就是读取到末尾的内容,如果这个字符是 '\n'就是一行
line++;
}
}
printf("line = %d\n",line);
fclose(fp);
return 0;
}
例子: 使用fputs 和fgets 实现文件内容复制
#include <stdio.h> int main(int argc, const char *argv[]) { FILE *f_r;//读 FILE *f_w;//写 if((f_r=fopen(argv[1],"r")) == NULL) //程序运行时,终端输入文件名,只读方式打开 { perror("open r :"); return -1; } if((f_w=fopen(argv[2],"w")) == NULL) //只写方式打开,打开文件清空文件内容 { perror("open w :"); return -1; } char buf[30] = {0}; while(1) { if(fgets(buf,10,f_r)==NULL)//每次读取10个文件内容 { break; } fputs(buf,f_w); //把读取到的内容写到另一个文件中 } puts("cp over"); fclose(f_r); fclose(f_w); return 0; }