目录
思路:
首先检查命令行参数的数量,如果不是 2 个,即没有正确提供文件名,通过
printf
输出错误提示信息并返回-1
结束程序。使用
fopen
函数以只读模式打开指定的文件。如果打开失败,返回NULL
,通过perror
输出错误信息并返回-1
结束程序。定义一个字符数组
buf
用于存储每次通过fgets
读取的文件内容。定义一个整数len
用于记录文件的行数。使用一个
while
循环,通过fgets
函数从文件中读取内容到buf
中。只要fgets
能成功读取到内容(不为NULL
),就检查读取到的内容的最后一个字符是否为换行符'\n'
。如果是,就将行数len
加 1 。循环结束后,使用
printf
输出文件的行数和文件名。需要注意的是,由于wc -l
命令在处理最后一行没有换行符的文件时会少计一行,这里的实现可能也存在同样的情况。最后使用
fclose
关闭文件,释放相关资源。
代码:
#include <stdio.h>
#include <string.h>
int main(int argc, char const *argv[])
{
FILE *fp;
char buf[32] = "";
if (argc != 2)
{
printf("err: %s <filenme>\n",argv[0]);
return -1;
}
fp = fopen(argv[1], "r");
if (NULL == fp)
{
perror("fopen err");
return -1;
}
//循环fgets读文件, 只要读到就判断是否有\n, 如果有就累加行数
int len = 0;
while (fgets(buf, 32, fp) != NULL)
{
if (buf[strlen(buf) - 1] == '\n')
len++;
}
printf("%d %s\n", len, argv[1]); //wc -l会少一行,因为最后一行没有换行
fclose(fp);
return 0;
}