码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • char[]、char*与string相互转换——独家原创


    必会知识点。

    目录

    一、talk is cheap

    二、划重点

    三、助记


    一、talk is cheap

    1. #include
    2. #include
    3. #include
    4. using namespace std;
    5. int main() {
    6. // char[] 转 char*、string,直接赋值
    7. char ch0[] = "ali";
    8. char *str00 = ch0;
    9. str00[0] = 'x'; // str00指向的是array首地址,可以修改
    10. string str01 = ch0;
    11. cout << ch0 << endl; // xli
    12. cout << str00 << endl; // xli
    13. cout << str01 << endl; // xli
    14. // char* 转 char[]、string
    15. char tmp[] = "bli";
    16. char *str10 = tmp;
    17. char ch1[10] = {0};
    18. strcpy(ch1, str10); // 用strcpy(dst, src)
    19. string str11 = str10; // 直接赋值
    20. str11[0] = 'd';
    21. cout << str10 << endl; // bli
    22. cout << ch1 <// bli
    23. cout << str11 << endl; // dli
    24. // string 转 char*、char[]
    25. string str20 = "cli";
    26. char* str21 = const_cast<char*>(str20.data()); // 用data(),c++11前不含/0,c++11后与c_str()相同
    27. str20[0] = 'z'; // 可以修改
    28. char* str22 = const_cast<char*>(str20.c_str()); // 用c_str(),含/0
    29. char ch2[10] = {0};
    30. strcpy(ch2, str20.c_str()); // 用strcpy(dst, src)配合c_str()
    31. cout << str20 << endl; // zli
    32. cout << str21 << endl; // zli
    33. cout << str22 << endl; // zli
    34. cout << ch2 << endl; // zli
    35. return 0;
    36. }

    二、划重点

    不经思考是记不住的,让我们来看看为什么是这样转!

    char[]是array,char*是pointer,string是c++定义的一个类型,字符串"ali"并不是string,字符串是const的不可修改,而sting是内置类装数据(比如"cli")和接口(比如c_string()),里面数据可以修改。

    1. 字符串总是以'\0'结尾,char[]="ali",实际char[]存储了'a'、'l'、'i'、'\0'。既然这样,当然char[]转char*和string都可以直接赋值。
    2. char*转char[]要用strcpy(dst, src),char*转string直接赋值即可。
    3. string是个“盒子”,转其他格式当然要先取数据,用data()或c_str()。对于c++11俩接口没区别,c++11之前data()不含'\0'。但要注意data()或c_str()返回常量指针const char*,需要去const属性。既然返回的是const char*,转char[]当然就跟char*转char[]一样,用strcpy(dst, src)。

    三、助记

    转string,可以直接赋值。

    转char*,char[]是直接赋值,string要c_str()取数据然后去const。

    转char[],都要用strcpy(dst, src)。dst、src是指针。

  • 相关阅读:
    Express.js实现注册和登录
    新唐NUC980使用记录:开发环境准备与编译配置基础说明
    [附源码]java毕业设计毕业设计管理系统
    超简单:必须要掌握的运维小妙招
    针不戳 腾讯开源GitHub星标125K微服务架构进阶宝典
    机器学习笔记之EM算法(五)广义EM的总结与其他变种形式
    提升MODBUS-RTU通信数据刷新速度的常用方法
    实时分布式低延迟OLAP数据库Apache Pinot探索实操
    管理信息系统期末复习资料
    Spring Cloud 之 GateWay简介及简单DEMO的搭建
  • 原文地址:https://blog.csdn.net/weixin_36389889/article/details/127834200
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号