c - 转到一行并更改为大写

标签 c unix terminal

我正在尝试完成这项作业。基本上有一个 10 行的文件...使用 argv[],用户在位置 1 中输入文件名,行号是数组的位置 2。

到目前为止,一切正常...检查文件...计算行号等等。

你们建议我如何将该行上的字符更改为大写。我不知道该怎么做。我们只能使用lseek、open、write、read和close命令。

我的逻辑是...如果用户输入 5 来更改行号...在程序中我计算行号...当计数器达到 4 时...之后的任何内容都是第 5 行...直到\n。

计数器在每次遇到\n 时都会递增。

 int line;
  int counter = 0;
  char c;
  do
  {
    line = read(fd, &c, 1);
    if (c == '\n')
    {
      counter++;
    }
    if (lnum == counter)
    {

    }
  } while (line != 0);

最佳答案

您只需更改该行,使其保持相同的大小,以便您可以覆盖它(无需重写文件)。由于您已经找到了读取行的方法,因此您知道行开始的位置(以字节数为单位,感谢读取功能)。 因此,您读取必须更改为大写的行,将位置指示器重新定位到行的开头(使用 lseek),然后使用所需的更改重写读取行。

关于c - 转到一行并更改为大写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21841001/

相关文章:

c - 解释一下这个 makefile 是如何工作的?

c - 来自 epoll_wait 的 epoll 事件顺序

android - FAILURE 构建失败,出现异常 cordova。当构建命令运行时

javascript - 在 Windows 上使用 node.js 参数运行 grunt 任务

c - MinGw 交叉编译

c - 访问越界内存后,段错误不会立即出现

c - 获取 C 语言中 system() 的输出

c - 简单的c程序无法在linux中编译,出现奇怪的错误

c - unix gcc 文件覆盖

android - 在 Android 中运行 cat 命令