注册 登录
编程论坛 C++教室

关于sizeof()和string的c_str()和length()函数,给像我一样的初学者,有兴趣的看一眼

crazycoder 发布于 2008-11-21 09:04, 7340 次点击
sizeof()是求某种系统自带类型数据 或用户自定义类的大小的函数
比如:
int i;
double d;
则,在我的机器上,sizeof(i)和sizeof(int)的值都是4
sizeof(d)和sizeof(double)的值都是8

由于字符串应用频繁,所以系统有定义好的string类,使用起来很方便
但是如果你试一下:
string s1 = "I AM CHINESE, I LOVE MY COUNTRY ,I LOVE MY PEOPLE";
string s2 = "I AM PROUD OF IT";
则sizeof(string),sizeof(s1),sizeof(s2),它们的值都是16
如果你不明白,只要看一下string类的定义,你就明白了。因为你用sizeof(string),它的结果是string类里的所有
数据成员所占空间之和。string类里有一个指针,指向一片内存空间的首地址,那里才存放你的字符串。字符串不是
放在string类里面的,string累里只有指向该内存的指针。

string类有好多成员函数,比如length(),是用来返回字符串的长度的
string s = "fajlksdjflkjsdkl”;
s.length();
还有c_str(),很有用,是返回string对象的首地址,返回类型是 const char *。
这就是我的第一篇帖子啦,见笑了。
7 回复
#2
hitcolder2008-11-21 09:39
学习中,对新手确实很有帮助,谢谢楼主
#3
asd67918682008-11-21 15:18
我正好对c_str(), 不怎么了解 楼主继续啊
#4
crazycoder2008-11-21 17:38
感谢大家的关注,人要不断学习,才能进步
一起努力吧
#5
crazycoder2008-11-22 12:44
c_str()的一个简单应用如下:
#include <iostream>
#include <string>
using namespace std;

void show(string src)
{
    const char* s_pointer = src.c_str();
    cout << s_pointer << endl;
}

int main()
{
    string s1 = "Where Is China.";
    show(s1, A1);
    return 0;
}

打印结构就是:"Where Is China"
#6
crazycoder2008-11-22 13:07
上面有些地方打错字了,应该是:
#include <iostream>
#include <string>
using namespace std;

void show(string src)
{
    const char* s_pointer = src.c_str();
    cout << s_pointer << endl;
}

int main()
{
    string s1 = "Where Is China.";
    show(s1);
    return 0;
}

打印结果就是:"Where Is China"
#7
crazycoder2008-11-22 13:53
另一个算是c_str()的应用吧:
#include <iostream>
#include <string>
#include <vector>
using namespace std;

//下面这个函数用来把一个字符串倒置,并放存在一个字符数组里
void change(string src, vector<char> &dest)//vector是一个容器类,能够自动扩展存储空间
{
    const char* s_pointer = src.c_str(); //指向末字符
    for(int i = 0; i < src.length(); i++)
    {
        dest.push_back(s_pointer[src.length() - 1 - i]);
    }
    dest.push_back('\0');
}
//测试一下上面的函数是否好使
int main()
{
    vector<char> v1;
    string s1 = "abcdefghijklmn";
    change(s1, v1);
    for(int i = 0; v1[i] != '\0'; i++)
    {
        cout << v1[i];
    }
    cout << endl;
    return 0;
}
//在我的机器上,输出结果为nmlkjiggfedcba
#8
crazycoder2008-11-22 13:54
噢,上面最后一行有一个g应该是h
1