【问题标题】:Print the alphabet with write()使用 write() 打印字母表
【发布时间】:2021-09-18 18:32:05
【问题描述】:

我必须使用write() 函数打印字母表。我无法使用printf() 查看输出。

到目前为止我有这个:

#include <stdio.h>
#include <unistd.h>

char ft_print_alphabet(char);

int main()
{
    char ch;

    for(ch = 'a'; ch <= 'z'; ch++) {
        write(1, %ch, 26);
    }

    return(0);
}

我尝试过这样做,但我根本不理解 write() 函数。

有人可以帮帮我吗?

【问题讨论】:

  • 您好,write函数有什么不明白的地方?如果您的问题更具体一些,也许有人可以为您提供明确的答案。
  • 您的书、教程或其他信息来源对write 函数(尤其是它的参数)有何启示?如果你想写一个 single 字符,它是一个单字节,你需要给什么参数?特别是 size 参数应该是什么?
  • 或者是您显示的代码出现构建错误的主要问题?因为它无效。请具体说明您遇到的问题!也请阅读the help pages,接受SO tour,阅读How to Ask,以及this question checklist。请了解如何edit 改进您的问题。
  • freebsd.org/cgi/… ...你write(somewhere, from_this_address, this_number_of_bytes);。返回值是写入的有效字节数或-1 表示错误。
  • %ch 似乎是 &amp;ch 的拼写错误。 %ch 导致编译错误。

标签: c write


【解决方案1】:

在此处写入您想要的输出 id 1 作为终端上的默认输出 它需要一个char指针,这里你只有一个char,所以传递地址并写入将得到一个大小为一个char的指针 最后是你要打印的字符数,在这里你一一显示 写不默认打印回车

int main()
{
    char ch;

    for(ch = 'a'; ch <= 'z'; ch++) {
        write(1, &ch, 1);
    }

    return(0);
}

【讨论】:

  • 顺便写一下ssize_t write(int fd, const void *buf, size_t count)
【解决方案2】:
  1. 你能用 printf 显示没有运行的源代码吗?

  2. 写函数 在 C 语言中 1 是默认输出的文件描述符(您可以更改它)

在 linux 中,您可以像这样显示进程的所有文件描述符:

└─[0] <> ls /proc/self/fd -l
total 0q                                  <FD>
lrwx------ 1 longkl longkl 64 Jul  8 19:00 0 -> /dev/pts/1
lrwx------ 1 longkl longkl 64 Jul  8 19:00 1 -> /dev/pts/1/ <<current termial 
lrwx------ 1 longkl longkl 64 Jul  8 19:00 2 -> /dev/pts/1 
lr-x------ 1 longkl longkl 64 Jul  8 19:00 3 -> /proc/16378/fd

您可以使用在线文档来查看 write 的详细描述 https://man7.org/linux/man-pages/man2/write.2.html

【讨论】:

  • 这个不回答。作者没有说 printf 没有工作但他不能使用它(我猜它是用于学校项目或其他什么的)。顺便说一句,问题是关于 write 如何使用参数,而不是关于文件描述符的问题。如果您想详细解释文件描述符以引起他的好奇心并更好地理解 write,请使用评论部分,而不是答案
  • 谢谢,我是新手。我刚加入这个社区。​​span>
  • 没有问题,也没有任何个人问题:P 这只是为了避免在人们想要获得答案时避免混淆
猜你喜欢
  • 2021-12-17
  • 1970-01-01
  • 1970-01-01
  • 2021-09-22
  • 1970-01-01
  • 2021-08-07
  • 2019-03-27
  • 2018-05-23
  • 1970-01-01
相关资源
最近更新 更多