如果我知道您想要一个函数,您可以将 filename 和 numberLine 作为参数传递给该函数,然后让函数返回该行进行编辑,那么您可以使用以下内容:
#include <stdio.h>
#include <stdlib.h>
#define MAXC 256
char *SearchLine (int numberLine, char *line, char *filename);
int main (int argc, char **argv) {
if (argc < 2) {
fprintf (stderr, "error: insufficient input. usage: %s filename.\n",
argv[0]);
return 1;
}
char linebuf[MAXC] = {0};
int linenum = argc > 2 ? atoi (argv[2]) : 3;
SearchLine (linenum, linebuf, argv[1]);
printf ("\n line[%3d] : %s\n", linenum, linebuf);
return 0;
}
/* read line number 'numberLine' from 'filename' into 'line'.
* Returns line on success, NULL otherwise. (numberline is zero based)
*/
char *SearchLine (int numberLine, char *line, char *filename)
{
int index = 0;
FILE *fp = fopen (filename, "r");
if (!fp) {
fprintf (stderr, "SearchLine() error: file open failed '%s'\n",
filename);
return NULL;
}
while (fgets (line, MAXC, fp)) {
if (index == numberLine)
return line;
if (index > numberLine)
break;
index++;
}
fclose (fp);
*line = 0;
return NULL;
}
注意:行号基于零(例如0, 1, ...),如果您希望它们从1 运行,请进行调整。
查看SearchLine 注意 保存该行的数组作为参数之一传递。行有MAXC 字符(根据需要调整)。通过将数组传递给函数,您无需在SearchLine 中分配空间。该函数简单地读取文件中的每一行,直到计数器index == numberLine,然后返回该行。如果给定的数字大于文件中的行数,则将 line 设置为空字符串并返回 NULL。
一个简单的例子是:
输入文件
$ cat dat/captnjack.txt
This is a tale
Of Captain Jack Sparrow
A Pirate So Brave
On the Seven Seas.
输出
$ ./bin/fgets_linenum dat/captnjack.txt 1
line[ 1] : Of Captain Jack Sparrow
$ ./bin/fgets_linenum dat/captnjack.txt 4
line[ 4] :
如果您希望以不同的方式处理/编辑该行,请告诉我,我很乐意为您提供进一步帮助。