#include<stdio.h>
void main()
{
char a[]={'a','b','c'};
printf("%d",strlen(a));
}
c语言strlen的问题(这个答案为什么是4)
答案:5 悬赏:70 手机版
解决时间 2021-05-07 08:46
- 提问者网友:眉目添风霜
- 2021-05-06 22:57
最佳答案
- 五星知识达人网友:想偏头吻你
- 2021-05-06 23:20
extern int strlen(char *s)函数其实返回的是以s为首地址,0字符结束的这段内存的大小,
至于楼上说的我认为都不恰当;可以这么给您举例
char a[] = {0, 'a', 'b', 'c'};
如果使用strlen(a);那么得到的将是0,因为以a为首地址的字符就是0,所以就只有0个,
对于char a[] = {'a', 'b', 'c'};使用strlen(a);得到4的问题,其实得到的值是一个随机值,但是这个值肯定是大于等于3的,因为有可能以a为首地址,接下去的内存出了跟了abc这3个字符,之后接的不一定是0字符,有可能再接了几个字符(不管是什么,只要不是0),那它返回的肯定就不是3了,但是如果您使用sizeof(a)去查看的话它得到的值就是3,所占内存为3字节,而每个字符占1个字节
而对于char a[] = {"abc"};这个问题,您放心的使用strlen函数吧,因为这个是C风格的字符串,会自动在末尾添加一个0字符,所以您可以用sizeof(a);查看,它得到的值是4,也就是abc这3个字符所占的3个字节再加上添加的末尾那个0字符所占的内存,如果您有什么不明白的可以给我QQ讨论。
谢谢采纳!
全部回答
- 1楼网友:掌灯师
- 2021-05-07 02:19
用单引号 {'a', 'b', 'c'} 代表存储的是一个个的字符组成的字符数组
而用双引号 {"abc"} 代表存储的是一个字符串
C语言里面规定字符数组最后一维存储的是\0
而字符串没有这样的规定
- 2楼网友:逃夭
- 2021-05-07 02:07
char a[]={'a','b','c'};的定义字符串后系统自动加'\0',strlen()测量a[]中的字符的个数,将'\0'默认为a[]的字符处理,所以是4。char a[4]={"abc"};定义字符串strlen()只是测量"abc"字符串的实际长度而忽略末尾的结束字符。
- 3楼网友:慢性怪人
- 2021-05-07 01:42
strlen是计算字符串长度的你数组中只有3个字符当然返回的是3了,这3个程序数组内的元素不都是“a,b,c”么当然是3了,
原型:extern int strlen(char *s);
计算字符串s的(unsigned int型(返回一个int类型))长度,
返回s的长度,不包括结束符NULL。
- 4楼网友:西风乍起
- 2021-05-07 00:36
后面有一个结束字符0,标记字符串结束
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯