原文地址:
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;
分享到:
相关推荐
想要灵活应用宏,离不开#和##。 “ 在学习#和##之前,先来看一个关于”的例子: #include #include <string> int main() { const char* p1 = Hello, World!... const char* p2 = Hello, ... const char* p5 = Nihao,
此外,从C风格字符串转换到`std::string`,可以使用构造函数`std::string(const char*)`,如`std::string str(carr2);`。但是,这不会拷贝结束空字符,因此应确保输入的C风格字符串已正确终止。 总之,C风格字符串...
您可能感兴趣的文章:C#中使用强制类型实现字符串和ASCII码之间的转换C#、.Net中把字符串(String)格式转换为DateTime类型的三种方法C#自定义类型强制转换实例分析浅析C#数据类型转换的几种形式C#基础之数据类型转换...
`uevent`机制主要用于内核与用户空间之间的通信,当设备模型中的某个设备状态发生改变时(例如设备添加或删除),内核会发送一个事件通知给用户空间,这样用户空间的应用程序(如`udev`)就能根据这些事件做出相应的...
因此在处理Java字符串时,需要将jstring对象转换为char*,然后转换为C++的std::string类型。完成操作后,还需要使用ReleaseStringUTFChars函数来释放资源。 示例代码如下: ```cpp const char* cstr = env->...
char* pt = new char[n]; // 动态分配内存 if (非法条件) { print("ERROR!"); return; } …… // 对指针的正常使用 delete pt; } ``` 在上述代码中,如果满足非法条件,则分配的内存将不会被释放。为了防止这种...
C语言中的`sscanf`函数是用来从一个字符串中读取数据的,它的功能与`scanf`类似,但`scanf`是从标准输入(如键盘)读取数据,而`sscanf`则是从已知的字符串中读取。这个函数非常灵活,能够按照指定的格式解析字符串...
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. **第二种...
1. 动态SQL语句的定义与用途: 动态SQL(Dynamic SQL)是一种编程技术,允许在程序运行时构建和执行SQL语句。在PowerBuilder(PB)中,这种技术弥补了嵌入式SQL的局限性,如不能执行数据库定义语言(DDL)如创建表、...
double占用8个字节,存储64位二进制数据,结构与float类似,但指数部分为11位,尾数部分为52位。浮点数的精度和范围也因此得以扩大。 3. 字符型(Character) - 字符型在大多数语言中使用char类型表示,如C/C++/...
public void show(char T) { // 显示字符T } } Smart smart = new Smart(); smart.SmarEvent += new Smart.SmartDelegate(Display.show); smart.Typing(); ``` 在这个场景中,`Display`类通过`+=`运算符订阅了...