请教大家一个strlen函数的问题

2024-04-28 14:16:56
推荐回答(1个)
回答1:

出这道题目的人水平太差了,多办是半路出家的,非物誉常不专业,你的分析是有道理的。

可能出题人只用过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两个变量之间有多少内存浪费来对齐:)

R5vB8MXqwlGeDfHIpPxc