• C语言基础(不断更新)


    1.memcpy、 memmove、memccpy的区别

    字符串函数功能查询

    memcpy要求源串和目的串不能重叠

    memccpy:copy直至遇到由参数指定的ch.

    memmove: 源串和目的串可以重叠。

    2.strcpy写法

    【转载】面试常考题型之strcpy写法

    • 注意检查指针有效性,注:’’与NULL一样,是acii码为0的字符,都怪自己以前看别人的代码不求甚解,还妄加评论,到现在才弄清楚这一点,检查字符串的有效性不是用strlen(str)==0来进行的。
    • 注意抛出异常,如果指针无效,抛出异常,throw “invalid pointer”;注意这种throw的方式是c++风格,在c中实现异常处理还需颇费周折
    • 注意封口,也就是注意dest的最后一个字符串为’’
    • 注意返回值,以实现链式效果

    3.strlen的一些考虑

    strlen(NULL)和strlen(“”)有何区别?

    作为一个习惯了写c++代码的人,一直很依赖语言提供相应的边界检查,认为理所当然strlen里面会有对字符串为null这种特殊情形的检查,但是发现,其实c语言好多函数都需要注意调用条件,这是一个典型的例子,strlen(NULL);在编译的时候没问题,但是执行期就出错了。而strlen(“”);返回值为0,这是理所当然的。

    4.关于sizeof的碎碎念

    sizeof使用有两种形式:

    • sizeof(变量类型):必须加括号
    • sizeof(变量)or sizeof 变量,如sizeof int

    几种特殊的考虑:

    • sizeof(函数名):gcc返回1,听说vc不支持
    • sizeof(void):gcc返回1,听说vc不支持
    • sizeof(结构类型):需考虑对齐
    • sizeof(string)的值一定是固定的,在普通机器上为4,这就是我在下一条中总结的。关于sizeof(string),今天看那本面试宝典的时候看到这个表达式,有点吃惊,书上写着sizeof(string)=4;当时很纳闷,难道分配4个字节大小的内存给string吗?查阅了相关资料得出结论:string的实现在各库中可能有所不同,但是在同一库中相同一点是,无论你的string里放多长的字符串,它的sizeof()都是固定的,字符串所占的空间是从堆中动态分配的,与sizeof()无关。
    • sizeof(数组名):值为所有数组元素大小的和,见我另一篇数组名总结

    注意:

    • sizeof 不是函数,可能是个宏
    • sizeof获取的是在栈上需要的空间,堆上申请的空间跟sizeof无关。
    • sizeof是在编译器处理的,所以被sizeof的表达式是不会计算的,如下面输出是4,0,而不是4,3
      nt a = 0;
       
      cout<<sizeof(a=3)<<endl;
       
      cout<<a<<endl;
    • sizeof最强总结

    4.string 类型的大小

    好吧,这其实是一个c++问题,但是姑且先放入这个专题,请问下面这个程序结果为多少?

    #include <string>
    #include <iostream>
    typedef struct AA
    {
        std::string a;
        int *pb;
    }A;
     
    using namespace std;
    int main()
    {
        cout<<sizeof(A);
        return 0;
    }

  • 相关阅读:
    03月03日23:24:40 学习进度笔记
    03月03日23:23:03 学习进度笔记
    03月03日23:19:31 学习进度笔记
    为什么要使用Elasticsearch
    03月03日23:16:59 学习进度笔记
    4
    6
    10
    11
    5
  • 原文地址:https://www.cnblogs.com/obama/p/3308835.html
Copyright © 2020-2023  润新知