`
yfy_cpp
  • 浏览: 12818 次
  • 来自: 南昌
最近访客 更多访客>>
社区版块
存档分类
最新评论

浅析string 与char* char[]之间的转换

阅读更多
原文地址:http://www.jb51.net/article/41917.htm

与char*不同的是,string不一定以NULL('\0')结束。string长度可以根据length()得到,string可以根据下标访问。所以,不能将string直接赋值给char*

1、首先必须了解,string可以被看成是以字符为元素的一种容器。字符构成序列(字符串)。有时候在字符序列中进行遍历,标准的string类提供了STL容器接口。具有一些成员函数比如begin()、end(),迭代器可以根据他们进行定位。

注意,与char*不同的是,string不一定以NULL('\0')结束。string长度可以根据length()得到,string可以根据下标访问。所以,不能将string直接赋值给char*。

2、string 转换成 char *

如果要将string直接转换成const char *类型。string有2个函数可以运用。

一个是.c_str(),一个是data成员函数。

例子如下:

string s1 = "abcdeg";
const char *k = s1.c_str();
const char *t = s1.data();
printf("%s%s",k,t);
cout<<k<<t<<endl;


如上,都可以输出。内容是一样的。但是只能转换成const char*,如果去掉const编译不能通过。

那么,如果要转换成char*,可以用string的一个成员函数copy实现。

string s1 = "abcdefg";
char *data;
int len = s1.length();
data = (char *)malloc((len+1)*sizeof(char));
s1.copy(data,len,0);
printf("%s",data);
cout<<data;


3、char *转换成string

可以直接赋值。

string s;

char *p = "adghrtyh";

s = p;


不过这个是会出现问题的。

有一种情况我要说明一下。当我们定义了一个string类型之后,用printf("%s",s1);输出是会出问题的。这是因为“%s”要求后面的对象的首地址。但是string不是这样的一个类型。所以肯定出错。

用cout输出是没有问题的,若一定要printf输出。那么可以这样:
printf("%s",s1.c_str())

4、char[] 转换成string

这个也可以直接赋值。但是也会出现上面的问题。需要同样的处理。

5、string转换成char[]

这个由于我们知道string的长度,可以根据length()函数得到,又可以根据下标直接访问,所以用一个循环就可以赋值了。

这样的转换不可直接赋值。

    string pp = "dagah";
    char p[8];
    int i;
    for( i=0;i<pp.length();i++)
        p[i] = pp[i];
    p[i] = '\0';
    printf("%s\n",p);
    cout<<p;



分享到:
评论

相关推荐

    深入浅析C++中的#,##,和

    想要灵活应用宏,离不开#和##。 “ 在学习#和##之前,先来看一个关于”的例子: #include #include &lt;string&gt; int main() { const char* p1 = Hello, World!... const char* p2 = Hello, ... const char* p5 = Nihao,

    浅析string类字符串和C风格字符串之间的区别

    此外,从C风格字符串转换到`std::string`,可以使用构造函数`std::string(const char*)`,如`std::string str(carr2);`。但是,这不会拷贝结束空字符,因此应确保输入的C风格字符串已正确终止。 总之,C风格字符串...

    C# char类型字符转换大小写的实现代码

    您可能感兴趣的文章:C#中使用强制类型实现字符串和ASCII码之间的转换C#、.Net中把字符串(String)格式转换为DateTime类型的三种方法C#自定义类型强制转换实例分析浅析C#数据类型转换的几种形式C#基础之数据类型转换...

    Linux设备模型浅析之uevent篇.pdf

    `uevent`机制主要用于内核与用户空间之间的通信,当设备模型中的某个设备状态发生改变时(例如设备添加或删除),内核会发送一个事件通知给用户空间,这样用户空间的应用程序(如`udev`)就能根据这些事件做出相应的...

    浅析Android NDK编程中参数的传递.pdf

    因此在处理Java字符串时,需要将jstring对象转换为char*,然后转换为C++的std::string类型。完成操作后,还需要使用ReleaseStringUTFChars函数来释放资源。 示例代码如下: ```cpp const char* cstr = env-&gt;...

    C++程序设计内存泄漏浅析

    char* pt = new char[n]; // 动态分配内存 if (非法条件) { print("ERROR!"); return; } …… // 对指针的正常使用 delete pt; } ``` 在上述代码中,如果满足非法条件,则分配的内存将不会被释放。为了防止这种...

    浅析C语言中sscanf 的用法

    C语言中的`sscanf`函数是用来从一个字符串中读取数据的,它的功能与`scanf`类似,但`scanf`是从标准输入(如键盘)读取数据,而`sscanf`则是从已知的字符串中读取。这个函数非常灵活,能够按照指定的格式解析字符串...

    浅析PB下动态SQL语句.pdf

    EXECUTE IMMEDIATE 'CREATE TABLE base(code char(6),name char(30))' USING SQLCA; STRING lsSQL = "INSERT INTO TABLE base VALUES('320201', '市中区支行')"; EXECUTE IMMEDIATE :lsSQL; ``` 2. **第二种...

    浅析PB下动态SQL语句.docx

    1. 动态SQL语句的定义与用途: 动态SQL(Dynamic SQL)是一种编程技术,允许在程序运行时构建和执行SQL语句。在PowerBuilder(PB)中,这种技术弥补了嵌入式SQL的局限性,如不能执行数据库定义语言(DDL)如创建表、...

    基本数据类型存储格式浅析

    double占用8个字节,存储64位二进制数据,结构与float类似,但指数部分为11位,尾数部分为52位。浮点数的精度和范围也因此得以扩大。 3. 字符型(Character) - 字符型在大多数语言中使用char类型表示,如C/C++/...

    浅析C#委托和事件实例

    public void show(char T) { // 显示字符T } } Smart smart = new Smart(); smart.SmarEvent += new Smart.SmartDelegate(Display.show); smart.Typing(); ``` 在这个场景中,`Display`类通过`+=`运算符订阅了...

Global site tag (gtag.js) - Google Analytics