浅析string 与char* 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;

(0)

相关推荐

  • 基于Protobuf C++ serialize到char*的实现方法分析

    protobuf的Demo程序是 C++版本的protubuf有几种serialize和unSerialize的方法: 方法一: 官方demo程序采用的是 复制代码 代码如下: // Write the new address book back to disk. fstream output(argv[1], ios::out | ios::trunc | ios::binary); if (!address_book.SerializeToOstream(&output)) { cerr &l

  • 浅谈char*类型返回值和字符串常量

    看这样一段简单的程序: #include <stdio.h> char* fun() { return "fun"; } int main() { printf("%s", fun()); return 0; } 这段程序可以正常run,但是最好不要这么做. 因为  直观上你返回了一个局部的东西出去.  你可以再外面定义这个常量,然后返回. 另外,字符串常量不可修改,而char*意味着要修改,故此最好加上const. 以上就是小编为大家带来的浅谈char

  • C++中char*转换为LPCWSTR的解决方案

    前言 大家在学习或者使用Windows编程中,经常会碰到字符串之间的转换,char*转LPCWSTR也是其中一个比较常见的转换.下面就列出几种比较常用的转换方法.大家可以根据自己的需求选择相对应的方法,下面来一起学习学习吧. 1.通过MultiByteToWideChar函数转换 MultiByteToWideChar函数是将多字节转换为宽字节的一个API函数,它的原型如下: int MultiByteToWideChar( UINT CodePage, // code page DWORD d

  • C语言中char*和char[]用法区别分析

    本文实例分析了C语言中char* 和 char []的区别.分享给大家供大家参考之用.具体分析如下: 一般来说,很多人会觉得这两个定义效果一样,其实差别很大.以下是个人的一些看法,有不正确的地方望指正. 本质上来说,char *s定义了一个char型的指针,它只知道所指向的内存单元,并不知道这个内存单元有多大,所以: 当char *s = "hello";后,不能使用s[0]='a':语句进行赋值.这是将提示内存不能为"written". 当用char s[]=&q

  • C语言中判断一个char*是不是utf8编码

    C语言中判断一个char*是不是utf8编码 里我修改了一下, 纯ASCII编码的字符串也返回true, 因为UTF8和ASCII兼容 实例代码: int utf8_check(const char* str, size_t length) { size_t i; int nBytes; unsigned char chr; i = 0; nBytes = 0; while (i < length) { chr = *(str + i); if (nBytes == 0) { //计算字节数 i

  • string与char*转换的使用详解

    复制代码 代码如下: //string --> const char string str2ch: str2ch.c_str(); //============================= //string --> char * //先转为 const char , 然后 转char * char TargetFile[strlen(TorrentFileNameDown.c_str())];    strcpy(TargetFile,TorrentFileNameDown.c_str(

  • string,CString,char*之间的转化

    string,CString,char*之间的转化 int 转 CString:CString.Format("%d",int);...............................string 转 CString CString.format("%s", string.c_str()); 用c_str()确实比data()要好. .......................................char* 转 CString CString.

  • 深入理解c++中char*与wchar_t*与string以及wstring之间的相互转换

    复制代码 代码如下: #ifndef USE_H_      #define USE_H_ #include <iostream>      #include <windows.h>      #include <string>      using namespace std;      class CUser      {      public:          CUser();          virtual~ CUser();          char*

  • 用标准c++实现string与各种类型之间的转换

    要实现这个目标,非stringstream类莫属. 这个类在头文件中定义, < sstream>库定义了三种类:istringstream.ostringstream和stringstream,分别用来进行流的输入.输出和输入输出操作.另外,每个类都有一个对应的宽字符集版本. 简单起见,我主要以stringstream为中心,因为每个转换都要涉及到输入和输出操作. 示例1示范怎样使用一个stringstream对象进行从 string到int类型的转换 注意,使用string对象来代替字符数组

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

    1.首先必须了解,string可以被看成是以字符为元素的一种容器.字符构成序列(字符串).有时候在字符序列中进行遍历,标准的string类提供了STL容器接口.具有一些成员函数比如begin().end(),迭代器可以根据他们进行定位. 注意,与char*不同的是,string不一定以NULL('\0')结束.string长度可以根据length()得到,string可以根据下标访问.所以,不能将string直接赋值给char*. 2.string 转换成 char * 如果要将string直接

  • C++中CString string char* char 之间的字符转换(多种方法)

    首先解释下三者的含义 CString 是一种很有用的数据类型.它们很大程度上简化了MFC中的许多操作(适用于MFC框架),使得MFC在做字符串操作的时候方便了很多.需要包含头文件#include <afx.h> C++是字符串,功能比较强大.要想使用标准C++中string类,必须要包含#include <string>// 注意是<string>,不是<string.h>,带.h的是C语言中的头文件.Char * 专门用于指以'\0'为结束的字符串. 以下

  • C# char[]与string byte[]与string之间的转换详解

    1.char[]与string之间的转换 //string 转换成 Char[] string str="hello"; char[] arr=str.ToCharArray(); //Char[] 转换成 string string str1 = new string(arr); 2.byte[]与string之间的转化 string str = "你好,hello"; byte[] bytes; //byte[] 转换成 string bytes = Encod

  • C++编程之CString、string与、char数组的转换

    C++编程之CString.string与.char数组的转换 虽然网上关于CString,string,char数组的转换的文章一大堆,但是感觉很乱很杂,而且许多并不能真正达到目的,在此,我把自己调试通过的转换方法贴到这里,做个笔记. 编译环境:vs2008, Use Unicode Character Set //----------------ANSI字符串转换为UNICODE字符串----------------------// // 待转换的数组 char szDCBparam[50]

  • C#字符串String及字符Char的相关方法

    一.字符串: 1.访问String中的字符: string本身可看作一个Char数组. string s = "hello world"; for (int i = 0; i < s.Length; i++) { Console.WriteLine(s[i]); } //或者 foreach (char c in s) { Console.WriteLine(c); } 打散为字符数组(ToCharArray) string s = "Hello World"

  • 详谈C# 图片与byte[]之间以及byte[]与string之间的转换

    实例如下: //主要通过Stream作为中间桥梁 public static Image ByteArrayToImage(byte[] iamgebytes) { MemoryStream ms = new MemoryStream(iamgebytes); Image image = Image.FromStream(ms); return image; } public static byte[] ImageToByteArray(Image image) { MemoryStream m

  • 实例讲解String Date Calendar之间的转换

    1.Calendar 转化 String Calendar calendat = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String dateStr = sdf.format(calendar.getTime()); 2.String 转化Calendar String str="2012-5-27"; SimpleDateFormat s

  • java中String,数组,ArrayList三者之间的转换

    ArrayList转为String和数组 造一个元素为Integer的ArrayList 为list_int 造一个元素为String 的 ArrayList 为list_str ArrayList list_int = new ArrayList<Integer>(); //Integer的List list_int.add(1); list_int.add(3); list_int.add(5); list_int.add(9); ArrayList<String> list_

  • 浅谈java中字符串数组、字符串、整形之间的转换

    字符串数组转字符串(只能通过for循环): String[] str = {"abc", "bcd", "def"}; StringBuffer sB = new StringBuffer(); for (int i = 0; i < str.length;i++) { sB.append(str[i]); } String s = sB.toString(); 字符数组转字符串可以通过下面的方式: char[] data = {"

随机推荐