zoukankan      html  css  js  c++  java
  • C++ string 转 char*

    char * strc = new char[strlen(str.c_str())+1];
    strcpy(strc, str.c_str())
    这样转是返回一个串 而不是指针,如果直接
    char *p = const_cast<char*>(a.c_str());
    则返回的不正确。
        string path = path_buff;
        path = path + "\sky.jpg";
    
        int charlength = strlen(path.c_str()) + 1;
        char* strc = new char[charlength];
        strcpy_s(strc, charlength, path.c_str());
        return strc;

    c++ string转char*

    1、如果要将string转换为char*,可以使用string提供的函数c_str() ,或是函数data(),data除了返回字符串内容外,不附加结束符'',而c_str()返回一个以‘’结尾的字符数组。

    2、const char *c_str();
    c_str()函数返回一个指向正规C字符串的指针,内容与本string串相同.
    这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式.
    注意:一定要使用strcpy()函数 等来操作方法c_str()返回的指针
    比如:最好不要这样:
    char* c;
    string s="1234";
    c = s.c_str(); //c最后指向的内容是垃圾,因为s对象被析构,其内容被处理
    应该这样用:
    char c[20];
    string s="1234";
    strcpy(c,s.c_str());
    这样才不会出错,c_str()返回的是一个临时指针,不能对其进行操作
    再举个例子
    c_str() 以 char* 形式传回 string 内含字符串
    如果一个函数要求char*参数,可以使用c_str()方法:
    string s = "Hello World!";
    printf("%s",s.c_str()); //输出 "Hello World!"



    1、
    const char *p = a.data();

    2、
    const char *p = a.c_str();

    3、
    char *p = const_cast<char*>(a.c_str());


      头段时间有人问过我这个问题,可是我一点头绪都没有,直接说不会。现在从网上找了点资料,看了看,知道点东西了。

      一、string转char*。

      主要有三种方法可以将str转换为char*类型,分别是:data(); c_str(); copy();

      1.data()方法,如:

    1 string str = "hello";
    2 const char* p = str.data();//加const  或者用char * p=(char*)str.data();的形式

      同时有一点需要说明,这里在devc++中编译需要添加const,否则会报错invalid conversion from const char*  to char *,这里可以再前面加上const或者在等号后面给强制转化成char*的类型。

      下面解释下该问题,const char*是不能直接赋值到char*的,这样编译都不能通过,理由:假如可以的话,那么通过char*就可以修改const char指向的内容了,这是不允许的。所以char*要另外开辟新的空间,即上面的形式。

      2.c_str()方法,如:

    1 string str=“world”;
    2 const char *p = str.c_str();//同上,要加const或者等号右边用char*

      3.copy()方法,如:

    1 string str="hmmm";
    2 char p[50];
    3 str.copy(p, 5, 0);//这里5代表复制几个字符,0代表复制的位置,
    4 *(p+5)=‘’;//注意手动加结束符!!!

      二、char * 转string。

      可以直接赋值。

    1 string s;
    2 char *p = "hello";//直接赋值
    3 s = p;

      这里有一点要说明,当声明了string类型变量s后,用printf("%s",s);是会出错的,因为“%s”要求后面的对象的首地址。但是string不是这样的一个类型。所以肯定出错。

      三、string转char[]

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

    复制代码
    1     string pp = "dagah";
    2     char p[8];
    3     int i;
    4     for( i=0;i<pp.length();i++)
    5         p[i] = pp[i];
    6     p[i] = '';
    7     printf("%s
    ",p);
    8     cout<<p;
    复制代码

      四、char[]转string

      这里可以直接赋值。

    string 与char* char[]之间的转换_C 语言

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

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

    注意,与char*不同的是,string不一定以NULL('')结束。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] = '';
        printf("%s ",p);
        cout<<p;



  • 相关阅读:
    Android Studio git 使用
    LInux tty 非阻塞配置以及安全读取数据方法
    Android JNI LOG 打印
    Android APP JNI 编写
    插件地址
    Linux 设置默认路由
    Linux Shell 判断语句
    ORACLE存储过程创建失败,如何查看其原因
    ORACLE时间函数(SYSDATE)深入理解
    JS中,如何判断一个数是不是小数?如果是小数,如何判断它是几位小数 保留n位小数
  • 原文地址:https://www.cnblogs.com/mrguoguo/p/14435621.html
Copyright © 2011-2022 走看看