Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4519267
  • 博文数量: 356
  • 博客积分: 10458
  • 博客等级: 上将
  • 技术积分: 4734
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-24 14:59
文章分类

全部博文(356)

文章存档

2020年(17)

2019年(9)

2018年(26)

2017年(5)

2016年(11)

2015年(20)

2014年(2)

2013年(17)

2012年(15)

2011年(4)

2010年(7)

2009年(14)

2008年(209)

分类: C/C++

2008-03-26 20:38:47

在一个blog上看到的 一个关于sizeof() strlen()的题目 ......不清楚的地方挺多的
贴上来大家看看.说下为什么为是这样的  第一个strlen()为啥为21啊 .....  testString[10]这里不会自动加'\0' 么????
 

#include "string.h"
#include "stdio.h"

void main()
{
  int i;
  char testString[20];

  for(i = 0; i < 10; i++)
  {
        testString[i] = '0';
  }
  printf("\n%d", strlen(testString));
  printf("\n%d", sizeof(testString)); //

  printf("\n%s", testString); //


  {
      int i;
      char testString[20] = "abc";

      for(i = 0; i < 10; i++)
      {
          testString[i] = '0';
      }
      printf("\n%d", strlen(testString));
      printf("\n%d", sizeof(testString));
  }

  printf("\n************************");
  testString[0] = 'a';
  testString[1] = 'a';
  testString[2] = 'a';
  printf("\n%d", strlen(testString)); //

  printf("\n%d", sizeof(testString)); //

  printf("\n%s", testString); //


  for(i = 0; i< 10; i++)
  {
        testString[i] = '\0';
  }
  printf("************************");
  printf("\n%d", strlen(testString)); //

  printf("\n%d", sizeof(testString)); //

  printf("\n%s", testString); //


  {
      char testString[] = "abc";
      printf("\n***************************");
      printf("\n%d", strlen(testString)); //

      printf("\n%d", sizeof(testString)); //

      printf("\n%s", testString); //

  }

  {
      char testString[3] = "abc";
      printf("\n************************");
      printf("\n%d", strlen(testString)); //

      printf("\n%d", sizeof(testString)); //

      printf("\n%s", testString); //

  }

  {
      char testString[20] = "abc";
      printf("\n************************");
      printf("\n%d", strlen(testString)); //

      printf("\n%d", sizeof(testString)); //

      printf("\n%s", testString); //

  }

  printf("\n************************");
  /*testString[0] = 'a';
  testString[1] = 'b';
  testString[2] = 'c';*/

  for(i = 0; i < 19; i++)
  {
      testString[i] = '0';
  }
  printf("\n%d", strlen(testString)); //

  printf("\n%d", sizeof(testString)); //

  printf("\n%s\n", testString); //

}

==================================

下面是我机子上的运行结果


21
20
0000000000烫烫烫烫烫

10
20
************************
21
20
aaa0000000烫烫烫烫烫
************************
0
20

***************************
3
4
abc
************************
7
3
abc蘟bc
************************
3
20
abc
************************
21
20
0000000000000000000?
Press any key to continue

阅读(3026) | 评论(6) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2008-10-30 16:40:17

呃,不知道你能会不会看到这个回复 /*对下面这段代码做了实验*/ int i; char testString[20]; for(i = 0; i < 10; i++)/*如果不给字符串赋值,strlen会每4字节多给出7字节个空间;如果赋值后,则之前多给出的7字节空间相应减少6字节,个人这里认为是vc6.0在你进行了赋值操作后,strlen函数给形参预留了1个字节的结束符空间,而赋值操作不知道为什么预留了6字节*/ testString[i] = '0'; printf("\n%d", strlen(testString)); 大学学了vc后就一直没用到实际当中,现在刚开始捡VC的知识,望以后能请教……=P

chinaunix网友2008-04-21 22:22:25

char* p = (char*)ptr;//这句不要,哈哈,基础不过关,库函数是用汇编实现的,不过原理相同

chinaunix网友2008-04-20 20:16:31

的确不同编译器值会不一样 没想到你看完了这边这么多文章啊

chinaunix网友2008-04-20 15:17:39

要联系我,email: yinbin.coco@gmail.com 你是个善于思考的人,还有,比我勤快

chinaunix网友2008-04-20 15:15:19

哈哈,至少我试了,在vc和dev c++中就不一样