• [C++] string char* (visual studio)


    先说个题外话,字符串的长度 。

    string a = "12345";
    a.size()
    a.length()
    
    
    char a[] = "12345";
    strlen(a)
    sizeof(a)/sizeof(char)
    
    
    char* a = "12345"
    strlen(a)

    char*的sizeof是求的指针的长度,永远是4 !!!。

    char* or char[] to string

    直接赋即可

    char* a = "123";
    char b[] = "123";
    string c = a;
    string d = b;

    string to char*

    string可以被看成是以字符为元素的一种容器。字符构成序列(字符串)。有时候在字符序列中进行遍历,标准的string类提供了STL容器接口。

    具有一些成员函数比如begin()、end(),迭代器可以根据他们进行定位。

    与char*不同的是,string不一定以NULL('')结束。string长度可以根据length()或者size()得到【相同效果】,string可以根据下标访问。

    注意const !!!

    string a = "123";
    const char* b = a.c_str();
    const char* c = a.data();

    硬转char*

    string a = "123";
    char* b = new char[a.size()+1];
    strcpy_s(b, a.size()+1, a.c_str());

    (1)strcpy_s的第二个参数

    errno_t strcpy_s(
       char *strDestination,
       size_t numberOfElements,
       const char *strSource 
    );
    
    strDestination      位置的位置字符串缓冲区
    numberOfElements    目标字符串缓冲区的大小。
    strSource           null 终止的源字符串缓冲区。

    (2)strcpy

    这是一个被microsoft遗弃了(出于安全考虑,很多函数内部是不进行参数检测的(包括越界类的)),会报错,两种解决办法。

    strcpy(b, a.c_str());
    error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    1> c:program files (x86)microsoft visual studio 11.0vcincludestring.h(110) : 参见“strcpy”的声明

    第一种就是弃用,使用MS推荐的strcpy_s。

    第二种就是屏蔽掉。三种办法:

    1)在所有#include之前加上    #define _CRT_SECURE_NO_DEPRECATE

    2)使用声明  #pragma warning(disable:4996)

    3)项目->属性->配置属性->C/C++ -> 预处理器 -> 预处理器定义,增加:

    _CRT_SECURE_NO_DEPRECATE



  • 相关阅读:
    [原创]mac终端前面的计算机名怎么改??
    iOS获取当前设备方向
    mac电脑Coding显示/隐藏文件
    从tomcat7升级到tomcat8的一个坑
    Tomcat环境开发技巧
    No.2 网络功能
    No.1 持久化
    No.0 项目起步
    读mysqlbinlog二三事
    版本号小常识
  • 原文地址:https://www.cnblogs.com/zhanxiage1994/p/6909827.html
Copyright © 2020-2023  润新知