_cstr()作用是吧一个string串转换成一个C-style的串,以"/0"null character结尾,返回的是一个指向该C-style串的常指针。

C-style的串的观看角度在于把串分成一个个字符的组合而成,比如str1="abcdef",转换成C-style串就是str1='a''b''c''d''e''f''/0';

对于标准库类型string串,则是在一个整体来看的,比如strcat(),strcpy()都是从中截取一个小整体串进行操作,结尾没有'/0'

【msdn上的一段代码,很好的说明了问题:】

// basic_string_c_str.cpp
// compile with: /EHsc
#include <string>
#include <iostream>

int main( )
{
   using namespace std;

string  str1 ( "Hello world" );
   cout << "The original string object str1 is: "
        << str1 << endl;
   cout << "The length of the string object str1 = "
        << str1.length ( ) << endl << endl;

// Converting a string to an array of characters
   const char *ptr1 = 0;
   ptr1= str1.data ( );
   cout << "The modified string object ptr1 is: " << ptr1
        << endl;
   cout << "The length of character array str1 = "
        << strlen ( ptr1) << endl << endl;

// Converting a string to a C-style string
   const char *c_str1 = str1.c_str ( );
   cout << "The C-style string c_str1 is: " << c_str1
        << endl;
   cout << "The length of C-style string str1 = "
        << strlen ( c_str1) << endl << endl;
}

OUTPUT:

The original string object str1 is: Hello world
The length of the string object str1 = 11
The modified string object ptr1 is: Hello world
The length of character array str1 = 11
The C-style string c_str1 is: Hello world
The length of C-style string str1 = 11
C风格字符串与标准库类型string性能比较(C-style character string and std::string)
《c++primer》上提到,推荐在c++程序中使用string,而不使用从C集成而来的风格字符串,原因如下:
(1)使用string安全,不用程序员管理内存分配释放(2)程序写起来比较简洁、方便、不容易出错(3)效率比较高
关于效率比较问题,书上有例子程序:#include <iostream>   #include <windows.h>#include <string>using   namespace std; 

int main()   {     const size_t size = 20;        char pc[1000000];

    for (size_t i = 0; i != 10 - 1; ++i)    {        pc[i] = ' ';    }    pc[999999] = '/0';

    const size_t len = strlen(pc);    size_t time = GetTickCount();    for(size_t ix = 0; ix != size; ++ix)    {        char *pc2 = new char[len + 1];        strcpy(pc2, pc);        if (strcmp(pc2, pc))        {                    delete [] pc2;        }    }

    time = GetTickCount() - time;    cout <<"C style time is: " <<time <<" ms." <<endl;

    string str (1000000, ' ');    time = GetTickCount();     for(int ix1 = 0; ix1 != size; ++ix1)    {        string str2 = str;        if (str2 != str);    }    time = GetTickCount() - time;    cout <<"C++ style time is: " <<time <<" ms." <<endl;

    return   0; }   

运行结果:c-style time is:93msc++ style time is:32ms

对于data(),很简单,他是string类的一个函数,作用是返回指向现有串的第一个字符的指针,看本页第一个msdn中的例子。

路过:string中的_cstr()、data()相关推荐

  1. string中c_str()、data()、copy(p,n)函数的用法

    转载:http://www.cnblogs.com/qlwy/archive/2012/03/25/2416937.html 标准库的string类提供了3个成员函数来从一个string得到c类型的字 ...

  2. http请求中的Query String Parameters、Form Data、Request Payload

    参考: (1).(http请求参数之Query String Parameters.Form Data.Request Payload) - https://www.jianshu.com/p/c81 ...

  3. 为什么String中的Java hashCode()使用31作为乘数?

    本文翻译自:Why does Java's hashCode() in String use 31 as a multiplier? Per the Java documentation, the h ...

  4. Winform中使用Mysql.Data.dll实现连接Mysql数据库并执行sql语句(排除ddl等非法语句的执行)

    场景 Winform中连接Mysql8并查询表中数据进行显示: Winform中连接Mysql8并查询表中数据进行显示_BADAO_LIUMANG_QIZHI的博客-CSDN博客 与上面实现的流程类似 ...

  5. Query String Parameters、Form Data、Request Payload的区别

    Query String Parameters 当发起一次GET请求时,参数会以url string的形式进行传递.即?后的字符串则为其请求参数,并以&作为分隔符. 如下http请求报文头: ...

  6. java string jdk_Java.lang.String中JDK API 1.6.0摘要。

    Java.lang.String中JDK API 1.6.0摘要. String 类代表字符串.示例: String str = "abc"; 字符串是常量,它们的值在创建之后不能 ...

  7. 汇编语言: 从键盘上输入一串字符(用回车键结束,使用 10 号功能调用。)放在 STRING 中,试 编制一个程序测试字符串中是否存在数字。如有,则把 CL 的第 5 位置 1,否则将该位置置 0。

    从键盘上输入一串字符(用回车键结束,使用 10 号功能调用.)放在 STRING 中,试 编制一个程序测试字符串中是否存在数字.如有,则把 CL 的第 5 位置 1,否则将该位置置 0. data s ...

  8. string中的Copy-on-Write技术

        在谈这项技术之前,我们先来了解一下string类内存分配.string类有一个私有成员,其类型是一个char*,记录用户从堆上分配内存的地址,其在构造时分配内存,在析构时释放内存.因为是从堆上 ...

  9. C++从string中删除所有的某个特定字符

    C++中要从string中删除所有某个特定字符, 可用如下代码 str.erase(std::remove(str.begin(), str.end(), 'a'), str.end()); 其中,  ...

最新文章

  1. bat贪吃蛇游戏代码_C语言写个贪吃蛇游戏
  2. Java实现swap交换(可能跟网上的一些方法不太一样)
  3. mysql 复制表结构到一个新表_MySQL复制表数据或表结构到新表中
  4. Ubuntu Server 上在安装Nginx时执行./confgiure后提示:C compiler cc is not found
  5. 一个有趣的观察:关于内向和外向
  6. 深入Java关键字null
  7. 第三次学JAVA再学不好就吃翔(part11)--基础语法之switch语句
  8. add结果 bigdecimal_java.math.BigDecimal.add(BigDecimal augend)方法
  9. 基于GitHub创建自己的个人网站
  10. MySQL5.7 group by新特性报错1055的解决办法
  11. 机器学习教程之4-正则化(Regularization)
  12. 计算机网络网线制作与测试结果,网线制作和测试
  13. Opencv实现多张JPG转GIF
  14. 1|homework
  15. Android Studio代码统计插件Statistic
  16. Vue3 的 Reactive 响应式到底是什么
  17. 计算机乘法函数公式word,计算机函数乘法word 在word中如何算乘法如图
  18. 华为S5300系列交换机V100R006SPH019升级补丁
  19. Android存储系统-MountService 和vold 对外置存储的管理(2)
  20. 打造更完美的小程序商城

热门文章

  1. 【产品设计-小程序】小胖工具箱系列—计算器
  2. 《少数派报告》权力的崛起——一个网管的MBA理论
  3. Python学习笔记(36)——python创建‘肥兔子字符图案’Word文档
  4. 字符串图案一键生成网站
  5. Android校园打车拼车系统 java python 小程序uni-app
  6. 吉林大学超星慕课平台——高级语言程序设计 实验06 结构体(2022级)
  7. excel表格中每隔一段时间自动保存文件,防止内容丢失
  8. 雅可比(Jacobi)迭代法解线性方程组的Matlab实现
  9. 英伟达首次开源内核、GitHub 强制用户身份验证、Google 悬赏 150 万美元找安卓漏洞 | 开源月报 Vol. 06...
  10. arduino学习中常用电机科普之步进电机