1、
#include "stdafx.h"
#include <string>
#include <iostream>
#include <stdio.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
string str1("abc\0de");
int str1length = str1.size();
std::cout <<" 1 ======= "<<str1length<<endl;
cout << " 2 ======= " << str1.c_str() << endl;
char* st2 = "abc\0de";
string str2(st2, 6);
int str2lenght = str2.size();
cout << " 3 ======= " << str2lenght <<endl;
cout << " 4 ======= " << str2.c_str() << endl;
cout << " 5 ======= " << str2.data() << endl;
cout << "------------------------" <<endl;
const char* cStr2 = str2.c_str();
for (int i=0; i<str2.size(); i++)
{
printf("%x\n", cStr2[i]);
}
cout<<endl;
cout << "***************************" <<endl;
const char* data2 = str2.data();
for (int i=0; i<str2.size(); i++)
{
printf("%x\n", data2[i]);
}
string str4(str2.c_str());
string str3(str2.c_str(), str2.length());
string str5(str2.data());
return 0;
}
打印信息:
1 ======= 3
2 ======= abc
3 ======= 6
4 ======= abc
5 ======= abc
------------------------
61
62
63
0
64
65
***************************
61
62
63
0
64
65
总结:
string可以存放中间包含'\0'的字符串,但是不能使用string str1("abc\0de")这个构造函数,
可以使用string str2(st2, 6)这种构造函数。c_str()和data()返回的都只是指针,我们可以通过
指针和长度获取所有数据。size()可以适用于中间包含'\0'的字符串。