C语言之字符串典型例题解析
作者:tianxia2s 发布时间:[ 2016/10/24 11:47:36 ] 推荐标签:C语言 字符串
又遇见几个好题,和以前的一些凑一块写一篇文章,作为我延迟去自习室的一个借口吧。
首先是第一题
1 int fun(char* s){
2 char* t = s;
3 while(*t++);
4 return t-s;
5 }
6 fun函数的功能是_______
7 比较两个字符串的大小
8 计算s所指字符串占用内存的大小
9 技术s所指字符串的长度
10 将s所指字符串复制到字符串t中
题目有四个选项,为什么我会选这个题呢,因为自己在面试C++的岗位中第一次遇见,印象里好像是写错了,然后在练习C语言计算机二级时候遇见不少变种,后别人在群里问这个题目,还因为第二个和第三个选项给吵起来了……如此种种。
题目很经典,在于你有C语言的基本功后,可以成功的排除第一个和第四个选项,知道函数返回的是一个int值,而且还和这个字符串的长度有关。那么除去长度后第二个选项也不能排除,因为占用内存大小刚刚好比字符串的长度多一个字节,相当于是 ,那这个时候需要分析运算符的优先级了。
*t++相当于*(t++)因为两个运算符优先级相同,而且是右结合的。然后可以将其拆分为两个表达式:*t和t++
两个表达式要不都运行,要不都不运行。后一次到 时,while中的t还做了一次++操作,所以此时s指向字符串开头,t指向字符串 的后一个位置,两者相减等于strlen(s)+1,也是sizeof(s);
见运行代码和结果:
char a[]="lavender";
printf("sizeof %s is %d
",a,sizeof(a));
printf("length %s is %d
",a,strlen(a));
printf("%s length is %d",a,fun(a));
运行结果
sizeof lavender is 9
length lavender is 8
lavender length is 9
Process returned 0 (0x0) execution time : 0.463 s
Press any key to continue.
好的,第二题:
int main()
{
char a[]="lavender";
char b[100]="lavender";
char* c ="lavenderdfdf";
printf("%p,%p,%p
",a,b);
printf("sizeof a is %d
",sizeof(a));
printf("sizeof b is %d
",sizeof(b));
printf("sizeof c is %d",sizeof(c));
return 0;
}
输出是啥?你猜猜咯,顺便说一声,我的编译器的环境是32位的。
答案
那么这个涉及到sizeof的一些用法,我自己也是半桶水,而且还写错了,引用一个链接,不权威,大家自己找答案:解析
第三个题目
下列选项中,能正确对字符串赋值的是
char s[5]={'A','b','c','d','e'};
char *s = "ABCDE";
char s[4][5]={"ABCDE"};
char *s;gets(s);
char s[5]="hi";s="bby";
请注意,只有第二个是对的哈。第一个末尾没有
第三个中的第一个字符串数组越界
第四个s没有初始空间
第五个字符数组的名字是常量,不可以更改
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11