如何使用低级 C 写出数值

7Ve*_*ct7 3 c

我有一个任务,我需要将指针传递给我的函数并使用“write”将其显示在我的函数中。

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

void ft_ft(int *nbr){
    //printf("%d\n", *nbr);
    char c = *nbr;

    write(1, &c, 1);

}

int main(){
    int nbr = 42;
    ft_ft(&nbr);
}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我试图将 int 值转换为 char ,因为从参数中获取指针是行不通的。另一方面,这也不是,所以你能帮助我吗?

错误消息:

[正在运行] (((所在文件夹))) && gcc (((文件名)))... 输出:* [完成] 在 0.046 秒内退出,代码=0

所以它实际上运行了代码,但它不是我想要的输出,我错过了什么?

printf() 工作正常,但我无法让“write”工作。

提前致谢

Cra*_*tey 5

\n

@CraigEstey 我怎样才能将您的评论标记为答案^?\xe2\x80\x93\n7Ver7dict7

\n
\n

好的,这就是答案。要使用write代替printf,我们可以使用snprintfand then write:

\n
void\nft_ft(int *nbr)\n{\n    char buf[100];\n    size_t len = snprintf(buf, sizeof buf, "%d\\n", *nbr);\n    write(1, buf, len);\n}\n
Run Code Online (Sandbox Code Playgroud)\n

如果任何snprinf相关功能也不可接受,则以下解决方案可能适合:

\n
void\nft_ft(int *nbr)\n{\n    char buf[100];\n\n    // point past the end\n    char *end = &buf[sizeof(buf)];\n\n    // last valid place for a char\n    char *beg = end - 1;\n\n    // add newline to end\n    *beg-- = '\\n';\n\n    // get copy\n    int num = *nbr;\n\n    // special case for zero\n    if (num == 0)\n        *beg-- = '0';\n\n    // handle negative numbers\n    int neg = (num < 0);\n    if (neg)\n        num = -num;\n\n    // add digits from least significant to most significant\n    for (;  num != 0;  num /= 10) {\n        int dig = num % 10;\n        *beg-- = dig + '0';\n    }\n\n    // add in minus sign\n    if (neg)\n        *beg-- = '-';\n\n    // point to first char\n    ++beg;\n\n    // output final string\n    write(1, beg, end - beg);\n}\n
Run Code Online (Sandbox Code Playgroud)\n