#include <map>
#include <iostream>
#include <algorithm>
#include <functional>
#include<forward_list>
#include<unordered_map>
#include<share.h>
using namespace std;
int main()
{
char *str="gdfgjdf;";
char str1[]="vfdvfdbdfb";//补一个‘\0’
char str2[10]="fdgf";
//char str3[4]="fdgfdgf";
char str4[]={'g','f','d'};
cout<<sizeof(*str)<<"***"<<sizeof(str1)<<"***"<<sizeof(str2)<<"***"<<sizeof(str4)<<endl;
}
*****strlen 和string.length都不算字符串结尾的\0
1/11/10/3
。。。。。。。。。。。。下边的总结的有点乱
#include <map>
#include <iostream>
#include<string>
#include <cstring>
using namespace std;
int main()
{
string str="vdfbdffdf";
char *ptr;
char ss[100];
cout<<sizeof(str)<<endl;//4
cout<< sizeof(&str)<<endl;//上边那个的别名4
//ptr=str;//false
ptr=ss;
//ss=str;类型不匹配
// ss=str.c_str();//false
//ptr=str.c_str();//const char* !=char *
//string--to---char* ,char[]
//ptr=str.c_str();//错误
int len=str.length();
ptr=new char[len+1];
strcpy(ptr,str.c_str());
cout<<ptr<<endl;
//char arr[];
//cout<<"sizeof:arr[]"<<sizeof(arr);必须赋初值
char arr[100];
cout<<"空arr"<<arr<<endl;//乱码
strcpy(arr,str.c_str());
cout<<arr<<sizeof(arr)<<endl;//vdfbdffdf,100
//
char s2[100]={'a','f','w'};
cout<<s2<<"***"<<s2[7]<<endl;//默认后边的初始化为空或者说\0
////
char *pp;
char sp[]="fdsfdsg";
pp=sp;
char *pp2="dsfsdgfs";//char数组可以直接赋值给指针
//char sp2[]=pp2;//没初始化大小
//char sp2[100]=pp2;//错误:数组用大括号括起来的初始化必须初始化
//***指针不能直接赋值给数组,因为指针只是一个4字节空间变量
char *str1;
char *str2="fdsaaaaaaaaaaaafds";
str1=str2;
cout<<str2<<endl;//这个表示指针指向相同位置
/////////
char sp2[100];
sp2=str2;//但是这样写就不对,只能说指针指向数组,但是不能数组指向指针
//所以我们只能逐一赋值
int i=0;
while(*pp2!='\0')
{
cout<<*pp2<<"#";
sp2[i++]=*pp2++;
}
cout<<"exe:"<<sp2<<"____"<<sizeof(sp2)<<endl;
///*******指针所指字符串是\0结尾,但是我们并没有对sp2结尾赋值‘\0'所以sp2输出会有部分乱码。
int *p;
*p=10;
cout<<p<<*p<<&p<<endl;//0x28...10...ox28.....两个地址不一样
//个人理解:第一个是常量10的地址,第二个是该地址里面的内容。第三个是指针的地址
cout<<sizeof(p)<<sizeof(*p)<<sizeof(&p)<<endl;//4,4,4,地址占4个字节
//下边的没有编译错误,但是不建议这样赋初值
int a;
int *lp=&a;
*lp=10;
cout<<a<<endl;//会导致程序异常不能终止(dos),但是可以编译运行出结果。
}
strlen
int main()
{
char *str="gdfgjdf;";
char str1[]="vfdvfdbdfb";//补一个‘\0’
char str2[10]="fdgf";
//char str3[4]="fdgfdgf";
char str4[]={'g','f','d','\0','p'};
cout<<strlen(str);
cout<<"***"<<strlen(str1);
cout<<"***"<<strlen(str2);
cout<<"***"<<strlen(str4)<<endl;
}
8,10,4,3
计算占用字符的个数,但是他必须要找到\0 才会停止计算,并且所占字符数量不包括\0
int main()
{
char *str="gdfgjdf;";
char str1[]="vfdvfdbdfb";//补一个‘\0’
char str2[10]="fdgf";
char str3[40];
char str4[]={'g','f','d','\0','p'};
cout<<strlen(str);
cout<<"***"<<strlen(str1);
cout<<"***"<<strlen(str2)<<"___"<<sizeof(str2)<<endl;
cout<<sizeof(str3)<<endl;
cout<<"***"<<strlen(str4)<<"**"<<sizeof(str4)<<endl;
}
8,10,4,10,40,3,5
strlen 在计算所占字符个数的时候找到\0,不算\0.,,,,sizeof计算字符指针是4,计算字符数组的时候,没有初始化大小的按照后边字符多少计算比用看\0.若是初始化字符数组大小,比如char s[100];那sizeof(s),就是100;
注意strlen 只能直接计算字符指针,字符数组,不能直接计算字符串,需要c-str();
int main()
{
string str="fdgdfbfgb";
cout<<strlen(str.c_str());//9
cout<<sizeof(str.c_str());//const char *,4
cout<<sizeof(str)<<endl;//4、、表示指针
cout<<sizeof("dsfdsvf")<<endl;//8
}
int main()
{
char *str="fdfvdsfvbfdb";
char s[]="fdsgdf";
str=s;//虽然可以这样赋值,但是本质上str是一个指针,而s是一段内存,数组名可以代表指针
cout<<sizeof(str)<<sizeof(s)<<endl;//4,7
cout<<strlen(str)<<strlen(s)<<endl;//6,6
}
注意char * 和char []str转string的时候直接赋值是可以的
int main()
{
char *str="fdfvdsfvbfdb";
char s[]="fdsgdf";
string ss(s);
string sss(str);
string a=s;
string b=str;
cout<<ss<<sss;
}
c++ sizeof,strlen, length的更多相关文章
-
【转载】sizeof()、strlen()、length()、size()详解和区别
c/c++中获取字符串长度.有以下函数:size().sizeof() .strlen().str.length();一.数组或字符串的长度:sizeof().strlen()1.sizeof():返 ...
-
sizeof、strlen、字符串、数组,整到一块,你还清楚吗?
写在前面 sizeof.strlen.字符串.数组,提到这些概念,相信学过C语言的人都能耳熟能详,也能谈得头头是道,但是,在实际运用中,当这些内容交织在一起时,大家却不一定能搞地清清楚楚,本文的目的正 ...
-
C语言中,当计算字符数组长度时,用sizeof 和strlen 的原理及两者的区别
字符数组的长度计算:必须以终止符’\0'作为边界,但对字符数组赋值时,有两种方式: 1:定义时用字符初始化 (1)char chs[7] = {'a', 'c', '0', 'z', '3','d'} ...
-
sizeof和strlen的区别和联系总结
link:http://blog.csdn.net/ghevinn/article/details/9974967 strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头 ...
-
sizeof和strlen在string类中的使用
字符串的sizeof和strlen 考虑下面的问题: char a[] = "abcdef"; char b[20] = "abcdef"; string s ...
-
strlen 字符型数组和字符数组 sizeof和strlen的区别 cin.get(input,Arsize)
strlenstrlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值 ...
-
关于sizeof 跟strlen 的区别
char *t = "我a"; char t1[MAX_PATH] = "aaaaaa"; char display1[MAX_PATH]; char disp ...
-
sizeof和strlen的区别
一.sizeof sizeof(...)是运算符,而不是一个函数. sizeof操作符的结果类型是size_t,在头文件中typedef为unsigned int,其值在编译时即计算好了, ...
-
Sizeof与Strlen的区别与联系
转自:http://www.cnblogs.com/carekee/articles/1630789.html 一.sizeof sizeof(...)是运算符,在头文件中typedef为uns ...
随机推荐
-
【GWAS文献解读】疟原虫青蒿素抗药性的全基因组关联分析
英文名:Genetic architecture of artemisinin-resistant Plasmodium falciparum 中文名:疟原虫青蒿素抗药性的全基因组关联分析 期刊:Na ...
-
explode,split,preg_split性能比较
explode,split,preg_split性能比较 分类: php2012-07-12 09:46 1109人阅读 评论(1) 收藏 举报 三个函数都是用来对字符串进行分割,下面分几个实验来 ...
-
也说面试 - 一个努力的iOS Dev
你们在金色的余晖中回家,而我却在银色的温柔中,匆匆潜行-----这是我的现状. 今年的招工形式不是很好,难找工作:也难招人.写这篇博客,是为了给各位在找工作的iOS dev 一些参考. 上篇:换坑(去 ...
-
js的执行顺序
js是顺序执行的,但是在一个<script></script>标签中,后面的函数会预加载.如: <script type="text/javascript&qu ...
-
第三方登录开发-Facebook
这次这个项目要分别可以使用新浪微博,qq互联以及Facebook和Twitter授权登录 facebook目前只支持oauth2技术,个人理解其工作流程是当用户想访问当前网站,却不想注册账号,此时当前 ...
-
UITableView总忘记的
因为总是忘记所以记一下 1.scrollToRowAtIndexPath QQ会话中总是希望添加一行就向上滚动总是显示最新的消息 NSIndexPath *lastIndexPath = [NSInd ...
-
Vs2017 xaramin mac build agent部署后记
换了四种黑苹果,最终成功了 步骤: 1.升级vs2017, 2.安装XCODE 8.3 3.安装vs2017 for mac 企业版 4 ...
-
Java关系运算
关系运算符用来比较两个值的关系.关系运算符是二元运算符,运算结果是 boolean 型.当运算符对应的关系成立时,运算结果是 true,否则是 false. 关系表达式是由关系运算符连接起来的表达式. ...
-
springMVC学习之路4-最后的征程:整合hibernate
今天小编很开心,因为学习springMVC基础的路终于走到了尽头,也成功搭建了一个SSH框架,暗自在心里默默地开心了1秒钟. 好了,回归正题:整合Hibernate.上一节,我为大家分享我整合spri ...
-
eclipse 报错Version 1.6.0_45 of the JVM is not suitable for this product. Version:1.7 or greater is required
最近离职来了一家新公司,之前的公司的开发IDE用的是IntelliJIDEA和SpringSourceToolSuit,自己在家里用的也是MyEclipse,所以使用eclipse的经验还是不足.结果 ...