Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4463152
  • 博文数量: 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

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

chinaunix网友2008-04-20 15:09:54

strlen是个c库函数,你去看一下实现吧,让我写的话: unsigned strlen(const char* ptr){ char* p = (char*)ptr; unsigned len = 0; while(*p++)++len; return len; }//所以这里返回的长度是不确定的。你可以试着修改数组长度,看结果有什么不同,还有换个编译器试试,vc可能有缺省的内存值什么的。