路过:string中的_cstr()、data()
_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()相关推荐
- string中c_str()、data()、copy(p,n)函数的用法
转载:http://www.cnblogs.com/qlwy/archive/2012/03/25/2416937.html 标准库的string类提供了3个成员函数来从一个string得到c类型的字 ...
- http请求中的Query String Parameters、Form Data、Request Payload
参考: (1).(http请求参数之Query String Parameters.Form Data.Request Payload) - https://www.jianshu.com/p/c81 ...
- 为什么String中的Java hashCode()使用31作为乘数?
本文翻译自:Why does Java's hashCode() in String use 31 as a multiplier? Per the Java documentation, the h ...
- Winform中使用Mysql.Data.dll实现连接Mysql数据库并执行sql语句(排除ddl等非法语句的执行)
场景 Winform中连接Mysql8并查询表中数据进行显示: Winform中连接Mysql8并查询表中数据进行显示_BADAO_LIUMANG_QIZHI的博客-CSDN博客 与上面实现的流程类似 ...
- Query String Parameters、Form Data、Request Payload的区别
Query String Parameters 当发起一次GET请求时,参数会以url string的形式进行传递.即?后的字符串则为其请求参数,并以&作为分隔符. 如下http请求报文头: ...
- java string jdk_Java.lang.String中JDK API 1.6.0摘要。
Java.lang.String中JDK API 1.6.0摘要. String 类代表字符串.示例: String str = "abc"; 字符串是常量,它们的值在创建之后不能 ...
- 汇编语言: 从键盘上输入一串字符(用回车键结束,使用 10 号功能调用。)放在 STRING 中,试 编制一个程序测试字符串中是否存在数字。如有,则把 CL 的第 5 位置 1,否则将该位置置 0。
从键盘上输入一串字符(用回车键结束,使用 10 号功能调用.)放在 STRING 中,试 编制一个程序测试字符串中是否存在数字.如有,则把 CL 的第 5 位置 1,否则将该位置置 0. data s ...
- string中的Copy-on-Write技术
在谈这项技术之前,我们先来了解一下string类内存分配.string类有一个私有成员,其类型是一个char*,记录用户从堆上分配内存的地址,其在构造时分配内存,在析构时释放内存.因为是从堆上 ...
- C++从string中删除所有的某个特定字符
C++中要从string中删除所有某个特定字符, 可用如下代码 str.erase(std::remove(str.begin(), str.end(), 'a'), str.end()); 其中, ...
最新文章
- bat贪吃蛇游戏代码_C语言写个贪吃蛇游戏
- Java实现swap交换(可能跟网上的一些方法不太一样)
- mysql 复制表结构到一个新表_MySQL复制表数据或表结构到新表中
- Ubuntu Server 上在安装Nginx时执行./confgiure后提示:C compiler cc is not found
- 一个有趣的观察:关于内向和外向
- 深入Java关键字null
- 第三次学JAVA再学不好就吃翔(part11)--基础语法之switch语句
- add结果 bigdecimal_java.math.BigDecimal.add(BigDecimal augend)方法
- 基于GitHub创建自己的个人网站
- MySQL5.7 group by新特性报错1055的解决办法
- 机器学习教程之4-正则化(Regularization)
- 计算机网络网线制作与测试结果,网线制作和测试
- Opencv实现多张JPG转GIF
- 1|homework
- Android Studio代码统计插件Statistic
- Vue3 的 Reactive 响应式到底是什么
- 计算机乘法函数公式word,计算机函数乘法word 在word中如何算乘法如图
- 华为S5300系列交换机V100R006SPH019升级补丁
- Android存储系统-MountService 和vold 对外置存储的管理(2)
- 打造更完美的小程序商城
热门文章
- 【产品设计-小程序】小胖工具箱系列—计算器
- 《少数派报告》权力的崛起——一个网管的MBA理论
- Python学习笔记(36)——python创建‘肥兔子字符图案’Word文档
- 字符串图案一键生成网站
- Android校园打车拼车系统 java python 小程序uni-app
- 吉林大学超星慕课平台——高级语言程序设计 实验06 结构体(2022级)
- excel表格中每隔一段时间自动保存文件,防止内容丢失
- 雅可比(Jacobi)迭代法解线性方程组的Matlab实现
- 英伟达首次开源内核、GitHub 强制用户身份验证、Google 悬赏 150 万美元找安卓漏洞 | 开源月报 Vol. 06...
- arduino学习中常用电机科普之步进电机