红联Linux门户
Linux帮助

一道面试题

发布时间:2011-05-13 21:29:31来源:红联作者:年年年
下列程序在32位linux或unix中的结果是什么?
func(char *str)
{
printf(" %d",sizeof(str));
printf(" %d",strlen(str));
}
main()
{
char a[]="123456789";
printf(" %d",sizeof(a));
printf(" %d",strlen(a));
func(a);
}

结果: 10 9 4 9
请问为什么两个printf(" %d",sizeof(a));出来的结果会不一样?
文章评论

共有 10 条评论

  1. lcy_612 于 2011-06-03 20:35:15发表:

    学习了。。。。。。。

  2. rootlinenic 于 2011-05-31 16:54:19发表:

    不懂。。。。。。

  3. 634632257 于 2011-05-30 11:11:26发表:

    学习下

  4. znlyj 于 2011-05-17 00:15:32发表:

    一个指针。。。。

  5. bird57521 于 2011-05-16 12:27:04发表:

    恩,学习了,以前只懂sizeof一个指针是4,没懂strlen一个指针是多少

  6. cxqcxq0177 于 2011-05-16 00:22:14发表:

    2楼的正解

  7. seanwu 于 2011-05-14 19:46:03发表:

    sizeof计算的都是类型的长度。如果是对象,则转换成类型,再计算类型的长度。在32位系统中。指针类型是32位,4个字节。所以对任何指针用sizeof结果都是4;

  8. lemonade0315 于 2011-05-14 11:21:33发表:

    学习了

  9. Olcevt 于 2011-05-14 08:52:32发表:

    路过

  10. firstmustok 于 2011-05-13 23:44:06发表:

    func(char *str)
    {
    printf(" %d",sizeof(str)); //指针长度,32位系统便是 4 字节
    printf(" %d",strlen(str));
    }
    main()
    {
    char a[]="123456789";
    printf(" %d",sizeof(a)); //数组长度,包括 ‘\0’, 所以是10个字符
    printf(" %d",strlen(a));
    func(a);
    }