红联Linux门户
Linux帮助

一个奇怪的简单问题

发布时间:2010-02-04 22:37:13来源:红联作者:hyqhyq_3
下面是一段C程序[code]#include
#include
#include

int main()
{
printf("A");
write(STDOUT_FILENO,"B",5);
printf("A\n");
exit(EXIT_SUCCESS);
}
[/code]期望的结果是BAA(不要觉得奇怪,仔细去看看书吧)
但是运行的结果是BAAA。
请问有人知道原因吗?
文章评论

共有 8 条评论

  1. openwayne 于 2010-02-05 23:09:24发表:

    C语言。。。

  2. openwayne 于 2010-02-05 23:09:09发表:

    {:2_92:}

  3. hstking 于 2010-02-05 21:21:17发表:

    我是菜鸟,正在学在。呵呵……
    有空交流下。

  4. hyqhyq_3 于 2010-02-05 17:03:06发表:

    hstking,你C语言很强啊!

  5. hyqhyq_3 于 2010-02-05 17:02:22发表:

    哦,是write写入的时候太长了,出现那种东西应该是偶然情况

  6. hstking 于 2010-02-05 11:43:15发表:

    估计时编译时,寄存器出现的问题。猜的啊。实际是怎么回事,我也不清楚。

    程序本身有问题,wirte写入时给的长度太长了。是故意找错的吧?

  7. hstking 于 2010-02-05 11:38:06发表:

    为了更清楚,我把程序稍微改了一下。
    #include
    #include
    #include

    int main(int argc ,char** argv)
    {
    printf("X");
    write(STDOUT_FILENO,"A",5);
    printf("Y\n");
    // write(STDOUT_FILENO,"B",1);
    exit(EXIT_SUCCESS);
    }

    首先是打印了一个X,此时指针在"X"的后面。然后用write函数在"X"之前打印一个"A"。在这一步执行完毕后,结果是AYX,此时的指针在"AY"与"X"之间(用gdb调试得出的结果)。最后调用printf函数打印"Y"时,指针又到了"X"的后面。执行完毕后,由于STDOUT_FILENO没有关闭,所以,指针又回到了"AY"之后。

  8. read 于 2010-02-05 10:14:52发表:

    {:2_91:}