请教大家一个strlen函数的问题
来源:百度知道 编辑:UC知道 时间:2024/05/09 12:14:06
有以下程序
#include
main()
{ char p[]={'a', 'b', 'c'}, q[10]={'a', 'b', 'c'};
printf("%d %d\n", strlen(p), strlen(q));
}
以下叙述中正确的是( )。
A)在给p和q数组置初值时,系统会自动添加字符串结束符,故输出的长度都为3
B)由于p数组中没有字符串结束符,长度不能确定;但q数组中字符串长度为3
C)由于q数组中没有字符串结束符,长度不能确定;但p数组中字符串长度为3
D)由于p和q数组中都没有字符串结束符,故长度都不能确定
======================================================
书上的答案是选A
但我觉的A也不对,因为这里给数组赋值是单个字符进行赋值的,不存在字符串常量赋值,所以不可能有字符串结束标记,大家怎么看?
#include
main()
{ char p[]={'a', 'b', 'c'}, q[10]={'a', 'b', 'c'};
printf("%d %d\n", strlen(p), strlen(q));
}
以下叙述中正确的是( )。
A)在给p和q数组置初值时,系统会自动添加字符串结束符,故输出的长度都为3
B)由于p数组中没有字符串结束符,长度不能确定;但q数组中字符串长度为3
C)由于q数组中没有字符串结束符,长度不能确定;但p数组中字符串长度为3
D)由于p和q数组中都没有字符串结束符,故长度都不能确定
======================================================
书上的答案是选A
但我觉的A也不对,因为这里给数组赋值是单个字符进行赋值的,不存在字符串常量赋值,所以不可能有字符串结束标记,大家怎么看?
出这道题目的人水平太差了,多办是半路出家的,非常不专业,你的分析是有道理的。
可能出题人只用过TURBO C,因为只有TURBO C这样的小程序才喜欢画蛇添足,自动添加结束符,所以长度会都是3。
TURBO C自动添加结束符的做法是不规范的,C语言定义并没有这样规定编译器的行为,我们写程序切记千万别依赖这些不规范行为,否则在你写手机程序、UNIX程序的时候,会感到无数的莫名其妙,许多时候永远都想不明白程序原因。
你的分析完全正确,在UNIX、LINUX、FREE BSD等正规的C语言里面,都是不添加结束符的,下面是我在SCO UNIX下运行程序的情况:
$ cat a.c
main()
{ char p[]={'a', 'b', 'c'}, q[10]={'a', 'b', 'c'};
printf("%d %d\n", strlen(p), strlen(q));
}
$ cc a.c
$ a.out
9 3
为什么输出结果是9和3呢,因为UNIX装载要初始化内存为0,所以第二个长度是3,而且前面个的9可以让我们知道p和q两个变量之间有多少内存浪费来对齐:)
在C语言里面
char p[];与char *p;在功能上是等价的
唯一不同的是p[]值不可改变 *p则可以
C语言判断一个字符串结束的唯一标志是\0 -- 结束符号
{'a','b','c'}在内存里面显示的是abc\0
请教大家一个strlen函数的问题
一个有关strlen函数的问题,很让人纳闷
输入一个字符串,计算其长度(不用strlen函数)
我碰到C语言中一个问题,就是用strlen测定字符串的长度,函数定义如下:
自定义函数完成strcpy(),strcat(),strlen()的功能
写一个函数,使输入的一个字符串按反方向存放,并将其打印出来。(用一维数组的方法,用到strlen())
编程:用自定义函数实现字符串处理函数strcat、 strcpy、strcmp、strlen和strlwr的功能?
3、用自定义函数实现字符串处理函数strcat、 strcpy、strcmp、strlen和strlwr的功能。
strlen()的用法
strlen的问题