字符长度?字符串长度吧,intlenstrlen(cin_str);
sizeof()操作符返回对象/类型所占空间大小(字节为单位),类型为size_t(看头文件可以知道就是int,只不过被typedef了一下标示用途而已)常见用法有sizeof(变量)和sizeof(类型),具体实例代码有很多,可以自行搜索这个返回值的大小并不一定是对象的内容所占的空间
基于效率方面考虑,存在编译对齐这一行为,对于结构体来说,成员分布不一定连续,sizeof()的结果往往大于本身各个数据成员sizeof()返回值之和(数组是连续存放的,通常编译器通常不对数组实施对齐,所以这里不需要考虑这点)strlen是从参数给定的内存地址开始判断该地址上对应的char值是否为0,如果不是则继续判断下一个,最后返回非0字节的个数,所以不只适用于字符串
不过对于非字符串,由于字符串结束符0存在的不确定,所以不一定能得到结果,有可能会因为访问到被系统保护禁止读取的内存区段导致程序崩溃sizeof(c):4,strlen(c):6c为指针,sizeof结果和sizeof(int)相同(32位系统中为4)c指向了长度为6的字符串字面量,所以strlen(c)返回6sizeof(d):7,strlen(d):6
d是char]数组,初始化中可以确定它的类型是char7],每个元素(char型)占1个字节,所以共7字节strlen理由同上注意初始化列表中的两个双引号之间的字符串字面量填充到数组中时,会自动在最后补0sizeof(e):6,strlen(e)由初始化可见e是char6]型的strlen(e)理论上来说是不确定的
如果lz给的代码放在函数体内,定义的是自动变量,这里以字符串形式输出e可以发现后面有d的内容(不是ghostwzf说的自动分配,lz可以自己改变d的内容然后再输出看看)原因是c实现过程中,自动变量存储在栈空间上,内存是高内存地址向低内存地址分配的所以可以通过之前定义的变量来估计可能的结果但是实际一般不会用这种方法,变数太多(例如受到对齐设置的影响)
相对而言,strlen作用于非字符串,结果无法预料,本身就是错误的(非语法错误,是语义错误/逻辑错误),所以,结果无法预料---原创回答团]
1.\n指的是换行符,一个字符串里面是不可能存在着换行符的,当然C++里的string类型除外
2.你要的是结束符\0,而不是换行符因为当输入字符串到数组,有两种形式,一种是无空格的
一种是有空格的,具体的输入方式C语言我不清楚,不过不论哪种在输入情况下遇到换行符\n都将
结束字符串输入,所以字符串数组至少最后一个字符是\0,用来标识字符串结束
所以循环条件改为:while(*samp;amp;*t);当然最好是:while((*s)!\0amp;amp;(*t)!\0)这样看着清晰明了
3.你的循环并未完全判断:
改为:if(*s\0amp;amp;*t!\0)returns(这儿不能够returns,因为你已经把指针进行加减了,所以指针s不再执行的是字符串首字符位置,应该在函数体第一句中用两个指针指向s,t如:char*tempss;char*temptt;然后结果returntempt;)
if(*s!\0amp;amp;*t\0)returntempt;
elsereturntemps;//(这儿是两个字符串长度相等情况下)
注意:你这个函数并无意义,因为如果你要返回长度更长的字符串,完全没有必要写
函数,因为有个strlen(char*)的函数,求的是字符串的长度的,你可以用
if(strlen(s)gt;strlen(p))等等这样的来判断
intstrlen1(constchar*s){
inti0;
while(*s++)i++;
returni;
}
intcmpstrlen(constchar*s1,constchar*s2){
ifstrlen(s1)gt;strlen(s2)return*s1;
elsereturn*s2;
}
intstrlen1(constchar*s){
inti0;
while(*s++)i++;
returni;
}
intcmpstrlen(constchar*s1,constchar*s2){
ifstrlen(s1)gt;strlen(s2)return*s1;
elsereturn*s2;
}
1.\n指的是换行符,一个字符串里面是不可能存在着换行符的,当然c++里的string类型除外
2.你要的是结束符\0,而不是换行符因为当输入字符串到数组,有两种形式,一种是无空格的
一种是有空格的,具体的输入方式c语言我不清楚,不过不论哪种在输入情况下遇到换行符\n都将
结束字符串输入,所以字符串数组至少最后一个字符是\0,用来标识字符串结束
所以循环条件改为:while(*samp;amp;*t);当然最好是:while((*s)!\0amp;amp;(*t)!\0)这样看着清晰明了
3.你的循环并未完全判断:
改为:if(*s\0amp;amp;*t!\0)returns(这儿不能够returns,因为你已经把指针进行加减了,所以指针s不再执行的是字符串首字符位置,应该在函数体第一句中用两个指针指向s,t如:char*tempss;char*temptt;然后结果returntempt;)
if(*s!\0amp;amp;*t\0)returntempt;
elsereturntemps;//(这儿是两个字符串长度相等情况下)
注意:你这个函数并无意义,因为如果你要返回长度更长的字符串,完全没有必要写
函数,因为有个strlen(char*)的函数,求的是字符串的长度的,你可以用
if(strlen(s)gt;strlen(p))等等这样的来判断
还没有评论,快来抢沙发吧!
最新发现
相关资讯
c语言双字长度,c语言中输入两个字符后怎样用strlen求字符长度
改为:if(*s\0amp
2024-02-17 17:55:25
rapoo无线鼠标对码,Rapoo1800Pro无线键鼠套装对码问题
3,将接收器插入电脑USB接口中此时,用其他可用的鼠标点击打开鼠标精灵,点击其中的设备对码按钮,然后就可以同时按下键盘上的ESC键和Q键进行键盘对码(直至显示对码成功)
2024-02-17 17:55:11
12306积分算法,12306积分是怎么算的
铁路畅行常旅客会员购买车票,将获得相应乘车积分,积分按照其所购车票票价进行累积举个例子来说,旅客购买100元车票,将可获得100×5500的积分积分首次达到10000分以上,即获得积分兑换资格每100积分相当于1元钱
2024-02-17 17:54:59
bios驱动睡眠后花屏,win10每次唤醒睡眠模式都会花屏,导致必须直接关闭电源才能重启,...
如果电脑休眠后无法唤醒,那是因为唤醒条件不满足,主要原因有以下几种:1.键盘或鼠标所使用的中断没有被设置成可用于唤醒,解决的方法是进入bios的powermanagementsetup设置界面,将pmevents选项下的相关设备的irq唤醒功能都打
2024-02-17 17:54:50
n卡不能自定义程序,NVIDIA显卡不能单独设置程序
1,NVIDIA显卡不能单独设置程序
2024-02-17 17:54:46
新闻热榜
热门游戏
精彩专题