zoukankan      html  css  js  c++  java
  • 字符串系列函数(不断跟新)

    1.sprintf,sprintf_s

    sprintf(char* buffer, const char* format, [argument]);

    vs下需要加上_CRT_SECURE_NO_WARNINGS

    #include <iostream>
    using namespace std;
    int main()
    {
        char name[1];
        int input = 9099;
        sprintf(name,"%d", input);
        system("pause");
    }

    这个貌似是典型的缓冲区溢出,程序崩溃,赋值超出了name的内存范围

    sprintf_s是sprintf的安全版本,编译器都推荐使用这个

    #include <iostream>
    using namespace std;
    int main()
    {
        char name[1];
        int input = 9099;
        sprintf_s(name, 1,"%d", input);
        system("pause");
    }

    这个指定了缓冲区是1个字节大小,而将大于1字节大小的赋值到缓冲区中马上报错

    而sprintf_s(name, 20,"%d", input);错误的将缓冲区的大小调到20,同样会造成内存溢出。所以要正确的指定缓冲区大小

    #include <iostream>
    using namespace std;
    int main()
    {
        char name[1];
        int input = 9099;
        sprintf_s(name, "%d", input);
        getchar();
    }

    同样会报错

    任何企图将格式字符串输出小于本身长度的缓冲区中都会报错。

    2.strcpy,strncpy,strcpy_s

    char* strcpy(char* dest, const char* src);

    把以Null字符结束的dest字符复制到dest指向的内存中,返回指向dest的指针

    str与dest内存不能重叠且dest有足够的内存来存放stc的内容

    #include <iostream>
    using namespace std;
    int main()
    {
        char* source = "123";
        char name[2];
        strcpy(name, source);
        getchar();
    }

    会报错,因为dest的内存太小了

    strncpy

    char* strncpy(char* dest, char* src, int num);

    如何提前遇到,则剩余的不全

    #include <iostream>
    using namespace std;
    int main()
    {
        char des[]="Hello,iam!";
        char source[]="abcdef";
        strncpy(des, source, 5);
        getchar();
    }

    会不全

    errno_t strcpy_s(char *strDestination, size_t numberOfElements, const char *strSource );

    这个也是指定缓冲区长度的复制方法

  • 相关阅读:
    【背包九讲专题】完全背包
    【指数降幂】费马小定理降幂&欧拉降幂
    【背包九讲专题】01背包
    2016ACM-ICPC亚洲区域赛(大连)
    Codeforces Round #697 (Div. 3)题解报告(A-G)
    pywifi 网卡反复断开连接
    webdriver xpath frame alert window
    windows pexpect ssh
    python3 串口读写 pyserial
    python3 unittest addTest 与addtests
  • 原文地址:https://www.cnblogs.com/zzyoucan/p/3731141.html
Copyright © 2011-2022 走看看