2019独角兽企业重金招聘Python工程师标准>>>

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();
}

转载于:https://my.oschina.net/ucliaohh/blog/806156

strlensizeof相关推荐

最新文章

  1. JVM解释器和编译器
  2. SAP Cloud for Customer里如何根据产品ID拿到其UUID
  3. 线段树 + 矩阵 --- ZOJ 3772 Calculate the Function
  4. 混合多云架构_使用混合多云每个人都应避免的3个陷阱(第2部分)
  5. c语言借阅管理题目内容描述,C语言 图书借阅管理统 第四组.doc
  6. TiDB集群大规模删除实践
  7. MYSQL中SET NAMES UTF8的作用和内涵
  8. u-boot 2016.05 添加自己的board 以及config.h uboot移植
  9. Oracle RMAN备份与还原
  10. xp如何添加桌面计算机回收站,WinXP如何找到回收站图标?
  11. 完美解决select2插件提示信息是英文的问题
  12. 关于程序员成长的一点思考
  13. Win10如何使用win7的照片查看器
  14. html 的(热点区域的建立、框架的建立)
  15. Windows环境下OpenSSL下载安装及制作证书
  16. localhost:8080打不开原因解决方法
  17. 51单片机用c语言在液晶1602上显示汉字,lcd1602与单片机连接图,基于51单片机的lcd1602液晶显示屏连接电路图...
  18. C++中cout的含义????
  19. 微信支付 SpringCloud+Vue
  20. python爬虫17K小说网资料

热门文章

  1. sharepoint 页面定制经验小结
  2. asp.net实现无刷新,无须AJAX
  3. Spring项目中使用webservice实现h5的websocket通信
  4. MySQL 8.0 error 2059: Authentication plugin 'caching_sha2_password' cannot be loaded
  5. aes 加密_结合RSA与AES实现前后端加密通信
  6. matlab padarray函数零,matlab padarray函数
  7. linux rt 应用程序,RTlinux编程
  8. android标题栏的属性,android – 属性“titleTextStyle”已经定义?
  9. 学生信息管理系统的价值PHP,php技术对学生管理系统实现的价值研究
  10. echarts3 graph java_Echarts中graph类型的运用求教