在我提出代码之前,有一点背景:我有一个名为math
的字符指针数组,现在,在while
循环中我试图将数学中的值转换为{ {1}}使用int
并将其保存在atoi
变量int
中。没有编译错误。但是,当我尝试打印ai
时,它不打印它。不知怎的,程序运行没有崩溃。我无法弄清楚问题是什么,如果有问题,程序应该在ai
崩溃,如果没有问题,那么它应该打印atoi
。
代码如下:
ai
答案 0 :(得分:1)
请注意,write
不是printf
。所以
write(STDOUT_FILENO,&ai,sizeof(&ai))
将sizeof(int)
个字符写入STDOUT;如果我们假设一个32位int
,它会将ASCII代码表中对应的字符打印到(ai >> 24) & ff
,(ai >> 16) & ff
,(ai >> 8) & ff
和(ai >> 0) & ff
,这是可能有四个不可打印的字符。
如果要将整数的字符串表示写入控制台,请使用:
printf("%d", ai);
代替。
答案 1 :(得分:0)
考虑您的其他信息
它是一个使用套接字的多处理客户端服务器建模代码
你可能在STDOUT_FILENO
中有一些额外的魔力。请考虑使用fdopen
,fprintf
,fflush
代替(绝对不正确)write
和(可能不正确)printf
。
像这样:
FILE* f = fdopen(STDOUT_FILENO, "w");
fprintf(f, "%d", ai);
fflush(f);
...
fclose(f); // also closes the socket
答案 2 :(得分:0)
write(STDOUT_FILENO,&ai,sizeof(&ai));
将ai
的位模式写入stdout
,但使用的地址长度为ai
,而不是ai
的长度。在现代机器上,这些通常是不同的值4
与8
,因此您正在编写任意垃圾甚至产生访问错误。
无论如何,这可能不是你想要的。
如果您想将您的号码作为可读字符串写入stdout
,请使用类似
write(STDOUT_FILENO, math, strlen(math));
math
已经有了您希望在stdout
上看到的字符表示形式。
如果你真的想抽出ai
的位代表,请使用
write(STDOUT_FILENO, &ai, sizeof ai);