C语言之字符串典型例题解析

发表于:2016-10-24 10:00

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:tianxia2s    来源:51Testing软件测试网采编

#
DoNet
  今天又遇见几个好题,和以前的一些凑一块写一篇文章,作为我延迟去自习室的一个借口吧。
  首先是第一题
  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值,而且还和这个字符串的长度有关。那么除去长度后第二个选项也不能排除,因为占用内存大小刚刚好比字符串的长度多一个字节,相当于是\0,那这个时候就需要分析运算符的优先级了。
  *t++相当于*(t++)因为两个运算符优先级相同,而且是右结合的。然后就可以将其拆分为两个表达式:*t和t++
  两个表达式要不就都运行,要不就都不运行。最后一次到\0时,while中的t还做了一次++操作,所以此时s指向字符串开头,t指向字符串\0的后一个位置,两者相减等于strlen(s)+1,也就是sizeof(s);
  见运行代码和结果:
  char a[]="lavender";
  printf("sizeof %s is %d\n",a,sizeof(a));
  printf("length %s is %d\n",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\n",a,b);
  printf("sizeof a is %d\n",sizeof(a));
  printf("sizeof b is %d\n",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";
  请注意,只有第二个是对的哈。第一个末尾没有\0
  第三个中的第一个字符串数组越界
  第四个s没有初始空间
  第五个字符数组的名字是常量,不可以更改
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号