原文来自:http://www.cnblogs.com/qlwy/archive/2012/03/25/2416937.html
标准库的string类提供了3个成员函数来从一个string得到c类型的字符数组:c_str()、data()、copy(p,n)。
1. c_str():生成一个const char*指针,指向以空字符终止的数组。
注:
①这个数组的数据是临时的,当有一个改变这些数据的成员函数被调用后,其中的数据就会失效。因此要么现用先转换,要么把它的数据复制到用户自己可以管理的内存中。注意
。
看下例:
const char* c;
string s="1234";
c = s.c_str();
cout<<c<<endl; //输出:1234
s="abcd";
cout<<c<<endl; //输出:abcd
上面如果继续用c指针的话,导致的错误将是不可想象的。就如:1234变为abcd
其实上面的c = s.c_str(); 不是一个好习惯。既然c指针指向的内容容易失效,我们就应该按照上面的方法,那怎么把数据复制出来呢?这就要用到strcpy等函数(推荐)。
//const char* c; //①
//char* c; //②
//char c[20];
char* c=new char[20];
string s="1234";
//c = s.c_str();
strcpy(c,s.c_str());
cout<<c<<endl; //输出:1234
s="abcd";
cout<<c<<endl; //输出:1234
注意:不能再像上面一样①所示了,const还怎么向里面写入值啊;也不能②所示,使用了未初始化的局部变量“c”,运行会出错的 。
② c_str()返回一个客户程序可读不可改的指向字符数组的指针,不需要手动释放或删除这个指针。
2. data():与c_str()类似,但是返回的数组不以空字符终止。
3. copy(p,n,size_type _Off = 0):从string类型对象中至多复制n个字符到字符指针p指向的空间中。默认从首字符开始,但是也可以指定,开始的位置(记住从0开始)。返回真正从对象中复制的字符。------用户要确保p指向的空间足够保存n个字符
。
// basic_string_copy.cpp
// compile with: /EHsc /W3
#include <string>
#include <iostream>
int main( )
{
using namespace std;
string str1 ( "1234567890" );
basic_string <char>::iterator str_Iter;
char array1 [ 20 ] = { 0 };
char array2 [ 10 ] = { 0 };
basic_string <char>:: pointer array1Ptr = array1;
basic_string <char>:: value_type *array2Ptr = array2;
cout << "The original string str1 is: ";
for ( str_Iter = str1.begin( ); str_Iter != str1.end( ); str_Iter++ )
cout << *str_Iter;
cout << endl;
basic_string <char>:: size_type nArray1;
// Note: string::copy is potentially unsafe, consider
// using string::_Copy_s instead.
nArray1 = str1.copy ( array1Ptr , 12 ); // C4996
cout << "The number of copied characters in array1 is: "
<< nArray1 << endl;
cout << "The copied characters array1 is: " << array1Ptr << endl;
basic_string <char>:: size_type nArray2;
// Note: string::copy is potentially unsafe, consider
// using string::_Copy_s instead.
nArray2 = str1.copy ( array2Ptr , 5 , 6 ); // C4996
cout << "The number of copied characters in array2 is: "
<< nArray2 << endl;
cout << "The copied characters array2 is: " << array2Ptr << endl;
////注意一定要使array3有足够的空间
//char array3[5]={0};
//basic_string<char>::pointer array3Ptr=array3;
//basic_string<char>::size_type nArray3;
//nArray3 = str1.copy(array3,9); //错误!!!!
//cout<<"The number of copied characters in array3 is: "
// <<nArray3<<endl;
//cout<<"The copied characters array3 is: "<<array3Ptr<<endl;
}
上面最后注释掉的部分,虽然编译没有错误,但是运行时会产生错误:Stack around the variable 'array3' was corrupted.
分享到:
相关推荐
在C++标准库中,`std::string` 类型提供了几个方法来访问其内部存储的字符序列,其中包括 `c_str()`, `data()` 和 `copy(p, n)`。这三个函数在处理字符串时非常常用,但它们各有不同的特性和用途。 1. `c_str()` ...
C++中string的用法 C++中的string类是C++标准程序库中的一部分,相比于C语言中的char*字符串,它具有更多的优点,例如不需要担心内存是否足够、字符串长度等问题。同时,作为一个类,它集成了许多操作函数,可以...
资源摘要信息"C语言string类用法" c语言中的字符串是一种非常重要的数据类型,它广泛应用于各种程序中。...c语言中的字符串是一个非常重要的数据类型,它提供了多种操作函数和方法来帮助我们更好地管理和使用字符串。
`c_str`函数将`string`转换为C风格的字符串,即`const char*`。这在需要与不支持`std::string`的旧式API交互时很有用。例如: ```cpp std::string str = "C Style"; const char* cStr = str.c_str(); ``` #### 6. `...
本文将详细介绍如何在C++程序中使用`string`类,包括其声明、初始化、常用成员函数以及一些高级用法。 #### 包含必要的头文件 要在C++程序中使用`string`类,必须首先包含 `<string>` 头文件。请注意,不要将其与...
* `int copy(char *s, int n, int pos = 0) const`: 把当前字符串中以 `pos` 开始的 `n` 个字符拷贝到以 `s` 为起始位置的字符数组中,返回实际拷贝的数目。 特性描述 STL String 类提供了多种特性描述,包括: *...
在C语言中,我们通常使用标准库函数如`strcpy`来拷贝字符串。然而,在某些特定情况下,如优化性能或理解底层操作,我们可能需要直接调用汇编语言程序来实现这一功能。在这个主题中,我们将探讨如何在C语言函数中嵌入...
copy 函数可以用来把当前字符串中的一部分拷贝到一个 C 字符数组中。 再次,String 类的特性描述函数可以用来获取字符串的某些特性。例如,capacity() 函数可以返回当前字符串的容量(即字符串中不必增加内存即可...
- **使用指定数量的相同字符初始化**:`string(int n, char c);` - 创建一个包含 `n` 个字符 `c` 的 `string` 对象。例如: ```cpp string s2(5, 'a'); // s2 的值为 "aaaaa" ``` - **默认构造函数**:`string()...
这里,我们使用copy函数将string对象s1转换成char*类型的字符串data。 CString、string、char*之间的字符转换是C++编程中非常重要的一部分。只有正确地进行字符转换,才能确保程序的正确运行。
C++ string 类常用函数 C++ 中的 string 类是一个非常常用的类,它提供了很多有用的函数来操作字符串。下面对 string 类的常用函数进行详细的介绍。 构造函数 C++ 中的 string 类有多种构造函数,可以用不同的...
本文将深入探讨 `std::string` 类的各种构造方法以及一系列重要的字符串操作函数,并对它们的功能进行详细说明。 #### 二、构造函数与析构函数 `std::string` 类提供了多种构造方法来创建字符串对象: 1. **默认...
### 标准C++中String类函数介绍 在C++编程语言中,`std::string` 类是处理字符串的一种非常高效且便捷的方式。相比于传统的 `char *` 字符串,`std::string` 提供了更多的功能,并且更加安全可靠。下面我们将详细...
- 复制到C字符串:`copy()`, `c_str()`, `data()` 将`std::string`转换为C风格的字符串。 - 子字符串:`substr()` 获取子字符串。 - 查找:查找函数,如`find()`, `rfind()`, `find_first_of()`, `find_last_of()` ...
在使用 string 类之前,需要包含头文件 `#include <string>`。声明一个字符串变量很简单:`string Str;`。string 类有多种构造函数,包括: * `string s;` 生成一个空字符串 * `string s(str)` 拷贝构造函数,生成 ...
### 巧用类String的构造函数 在C++编程中,自定义字符串类是一个非常典型的应用案例,尤其在深入理解类、对象以及内存管理等方面具有重要意义。本文将围绕一个简单的`String`类来探讨其构造函数及其成员函数的实现...
要在C++程序中使用`string`类,首先需要包含`<string>`头文件: ```cpp #include <string> ``` 注意不要与C语言中的`string.h`混淆,后者包含了C语言中的字符串处理函数。 #### 声明`string`对象 声明一个`...
`std::string`类在`<string>`头文件中定义,是C++标准模板库(STL)的一部分,极大地简化了字符串的操作。本篇文章将深入探讨`std::string`类的特性、构造、操作方法以及常见应用场景。 1. **构造与初始化** - 默认...