• 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位的。

    0028FF03,0028FE9F,0028FE98
    sizeof a is 9
    sizeof b is 100
    sizeof c is 4
    Process returned 0 (0x0)   execution time : 3.255 s
    Press any key to continue.
    答案

    那么这个涉及到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没有初始空间

    第五个字符数组的名字是常量,不可以更改

    我要坚持一年,一年后的成功才是我想要的。
  • 相关阅读:
    centos7查看yum安装的软件及路径
    CentOS7图形界面与命令行界面切换(转载)
    vmware安装centos7
    如何在IE11中设置兼容模式?设置的具体方法
    docker批量删除容器、镜像
    在Linux Centos 7.2 上安装指定版本Docker 17.03
    如何避免命令 rm -rf 的悲剧
    python django整理(五)配置favicon.ico,解决警告Not Found: /favicon.ico(转载)
    Ubuntu终端命令行缩短显示路径
    virtualenv 虚拟环境依赖安装
  • 原文地址:https://www.cnblogs.com/tianxia2s/p/5990623.html
Copyright © 2020-2023  润新知