"); //-->
c++
{
string var = "Olympic";
char *ptr = var.c_str();
}//还不能被编译,因为va.c_str()返回临时指针,赋值给ptr之后,在}结束之后,var对象就得析构,最后要使用ptr,就是垃圾内容
一,C语言的字符串
在C语言里,对字符串的处理一项都是一件比较痛苦的事情,因为通常在实现字符串的操作的时候都会用到最不容易驾驭的类型——指针。
比如下面这个例子:
//example 1:
char str[12] = "Hello";
char *p = str;
*p = 'h'; //改变第一个字母
//example 2:
char *ptr = "Hello";
*ptr = 'h'; //错误
第一个字符串时用数组开辟的,它是可以改变的变量。而第二个字符串则是一个常量,也就是字面值。ptr只是指向它的指针而已,而不能改变指向的内容。
要想通过指针来改变常量是错误,正确的写法应该是用const指针。
const char *ptr = "Hello";
二,初识string类
正是因为C风格字符串(以空字符结尾的字符数组)太过复杂难于掌握,不适合大程序的开发,所以C++标准库定义了一种string类,定义在头文件<string>。注意<string.h>和<cstring>都是错误的,这两个头文件主要定义C风格字符串操作的一些方法,譬如strlen(), strcpy()等。第一个是C的头文件格式,而第二个是C++风格的头文件,但是和<string.h>是一样的,它的目的是为了和C兼容。
看下面例子:
//example 3:
string str("world"); //可以用C风格字符串初始化
string words = "Hello";
string greet = words;
string join = greet + words; //可以像基本类型一样操作
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
ASP.NET入门—语法介绍
壶,平底锅,日志,和线性数字电位器创建任意电压曲线
壶,平底锅,日志,和线性数字电位器创建任意电压曲线
微信小程序
Pots, Pans, Logs, and Linear Digital Pots Create Arbitrary Voltage Curves
Pots, Pans, Logs, and Linear Digital Pots Create Arbitrary Voltage Curves
Arduino IDE引入库的机制