我有一个任务,我需要将指针传递给我的函数并使用“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”工作。
提前致谢
\n\n@CraigEstey 我怎样才能将您的评论标记为答案^?\xe2\x80\x93\n7Ver7dict7
\n
好的,这就是答案。要使用write代替printf,我们可以使用snprintfand then write:
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}\nRun Code Online (Sandbox Code Playgroud)\n如果任何snprinf相关功能也不可接受,则以下解决方案可能适合:
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}\nRun Code Online (Sandbox Code Playgroud)\n