zoukankan      html  css  js  c++  java
  • [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



  • 相关阅读:
    Git 历史/术语/命令/基本操作
    SQL 术语/语法/基本操作-必知必会
    bootstrap cdn地址
    IDEA 快捷键 大幅提高工作效率
    Django3 模版配置/过滤器/markdown=9
    Django3 路由文件位置/文件格式/路由传值=8
    Django3 创建项目/app全流程=7
    VS Code Django解决不必要报错
    Django3 如何使用静态文件/如何自定义后台管理页面=6
    Django3 如何编写单元测试和全面测试=5
  • 原文地址:https://www.cnblogs.com/zhanxiage1994/p/6909827.html
Copyright © 2011-2022 走看看