atoi返回的值无法打印

时间:2012-06-12 17:29:33

标签: c linux char int atoi

在我提出代码之前,有一点背景:我有一个名为math的字符指针数组,现在,在while循环中我试图将数学中的值转换为{ {1}}使用int并将其保存在atoi变量int中。没有编译错误。但是,当我尝试打印ai时,它不打印它。不知怎的,程序运行没有崩溃。我无法弄清楚问题是什么,如果有问题,程序应该在ai崩溃,如果没有问题,那么它应该打印atoi

代码如下:

ai

3 个答案:

答案 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中有一些额外的魔力。请考虑使用fdopenfprintffflush代替(绝对不正确)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的长度。在现代机器上,这些通常是不同的值48,因此您正在编写任意垃圾甚至产生访问错误。

无论如何,这可能不是你想要的。

如果您想将您的号码作为可读字符串写入stdout,请使用类似

的内容
write(STDOUT_FILENO, math, strlen(math));

math已经有了您希望在stdout上看到的字符表示形式。

如果你真的想抽出ai的位代表,请使用

write(STDOUT_FILENO, &ai, sizeof ai);