【问题标题】:How to use write() instead of printf()如何使用 write() 而不是 printf()
【发布时间】:2013-11-18 20:47:31
【问题描述】:

我试图通过使用系统调用 write() 在控制台上打印一些东西。到目前为止,这比我想象的要难。

函数保持简单:

void writeOutput(char a, int64_t b, uint8_t c) {
    char bNew[]; // what should be the size of that array=
    while(b != 0x0000000000000000) {
      int leftover = b%10;
      bNew[i] = intToChar(leftover);
      b = b/10;
      i++;
    }
}

char intToChar(int num) {
    return '0' + num;
}

a 应格式化为 char,b 为十进制数,c 为八进制数。

例如,一个可能的输入是: writeOutput('a', -0xffff, 17); // 输出是“a -65535 21”

打印的参数应该用空格分隔并以换行符终止到标准输出。另外,我试图做到这一点没有 sprintf-family 的功能。这让它有点棘手。

编辑:我的问题是:如何使用 write() 来做到这一点? (对不起,错过了!) 代码是在线的。 EDIT2:我的主要问题是不使用 sprintf 系列。我希望你能帮助我。

【问题讨论】:

  • 那么,你的问题是什么?
  • 你为什么不想使用printf()
  • 将参数转换成字符串,然后调用write。
  • @Kay:老实说,我一直在尝试实现这一点,但到目前为止我失败了。我希望有人可以帮助我。
  • 您可以使用sprintf 创建字符串,然后将其传递给write。

标签: c console output system-calls


【解决方案1】:

您可以使用第一个参数调用write(),该参数是作为标准输出的 fd。它将写入标准输出,这是您的控制台。但在此之前你需要一个字符串缓冲区,你可以使用sprintf' orsnprintfwith the same formatting asprintf`。但是 printf 方法更容易,除非您有一些非常特殊的用例,否则它应该可以达到目的。

【讨论】:

  • 提问者明确表示不想使用sprintf家族的功能。
  • sprintf当然可以,但是不使用sprintf家族的功能就不行吗?
  • @user2965601 你可以写你自己的printffamily。
【解决方案2】:
#include <unistd.h> 
 
int main(void) { 
    write(1,"Hello World!", 12); 
    return 0; 
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-31
    • 1970-01-01
    • 2016-04-27
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    相关资源
    最近更新 更多