strlen&&sizeof

懵懂的女人 提交于 2020-03-01 17:40:59

sizeof 和 strlen 有以下区别:
  sizeof 是一个操作符,strlen 是库函数。
  sizeof 的参数可以是数据的类型,也可以是变量,而 strlen 只能以结尾为‘\ 0‘的字符串作参数。
  编译器在编译时就计算出了 sizeof 的结果。而 strlen 函数必须在运行时才能计算出来。并且 sizeof
计算的是数据类型占内存的大小,而 strlen 计算的是字符串实际的长度。
  数组做 sizeof 的参数不退化,传递给 strlen 就退化为指针了。

 

int _tmain(int argc, _TCHAR* argv[])
{

 

//strlen(char*)函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个'\0',
//           如果你只定义没有给它赋初值,这个结果是不定的
//           它会从aa首地址一直找下去,直到遇到'\0'停止

//而sizeof()返回的是变量声明后所占的内存数,不是实际长度,
//此外sizeof不是函数,仅仅是一个操作符,strlen是函数。
  
  char aa[10];
  std::cout << strlen(aa) << endl; //结果是不定的

 

  char bb[10]={'\0'}; 
  std::cout << strlen(bb) << endl; //结果为0

 

  char cc[10] = "hui"; 
  std::cout << strlen(cc) << endl; //结果为3

 

 char *s="Golden Global View"; 
 std::cout << strlen(s) << endl;  // 18

 

  std::cout << sizeof(aa) << endl;          // 10
  std::cout << sizeof(bb) << endl;          // 10
  std::cout << sizeof(cc) << endl;          // 10
  std::cout << sizeof(s)  << endl;           // 4

 //大部分编译程序 在编译的时候就把sizeof计算过了 是类型或是变量的长度  这就是sizeof(x)可以用来定义数组维数的原因

 char* ee = "0123456789";
 std::cout << sizeof(ee) << endl;  //结果 4 ===》ee是指向字符串常量的字符指针 
 std::cout << sizeof(*ee) << endl; //结果 1 ===》*ee是第一个字符

 

 char str[20]="0123456789"; 
 std::cout << strlen(str) << endl;     //10
 std::cout << sizeof(str) << endl;     //20

 

 char ff[] = "0123456789"; 
 std::cout << sizeof(ff)  << endl; //结果 11 ===》ff是数组,计算到\0位置,因此是10+1   
 std::cout << sizeof(*ff) << endl; //结果 1 ===》*ff是第一个字符   
  
 char gg[100] = "0123456789";
 std::cout << sizeof(gg) << endl;  //结果是100 ===》gg表示在内存中的大小 100×1   
 std::cout << strlen(gg) << endl;  //结果是10 ===》strlen是个函数,内部实现是用一个循环计算到\0之前为止  
 
 int hh[100] = {0,1,2,3,4,5,6,7,8,9};
 std::cout << sizeof(hh) << endl;  //结果 400 ===》hh表示在内存中的大小 100×4   
//std::cout << strlen(hh) << endl;  //错误 ===》strlen的参数只能是char* 且必须是以'\0'结尾的   
 
 char q[]="abc"; 
 char p[]="abc\n";

 std::cout << sizeof(q) << endl;   // 4
 std::cout << sizeof(p) << endl;   // 5
 std::cout << strlen(q) << endl;   // 3
 std::cout << strlen(p) << endl;   // 4
 
 class X
   {int i; int j; char k; };
    X x;
    cout<<sizeof(X)<<endl; //结果 12 ===》内存补齐   
    cout<<sizeof(x)<<endl; //结果 12 同上

 
    cin.get();
}

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!