const char* to char*(当函数传递参数时)

来自 https://blog.csdn.net/rongrongyaofeiqi/article/details/52442169

https://blog.csdn.net/hebbely/article/details/79577880

简述:

1) char*转string:可以直接赋值。
2) char[]转string:可以直接赋值。
3) char*转char[]:不能直接赋值,可以循环char*字符串逐个字符赋值,也可以使用strcpy_s等函数。
4) string转char[]:不能直接赋值,可以循环char*字符串逐个字符赋值,也可以使用strcpy_s等函数
5) string转char*:调用string对象的c_str函数或data函数或copy函数。
6) char[]转char*:直接赋值即可。

使用时,要对源格式和目标格式进行初始化。源格式赋值为具体的内容,目标格式赋值为空。

总结如下:

A. 变成string,直接赋值。
B. char[]变成别的,直接赋值。
C. char*变const char*容易,const char*变char*麻烦。<const_cast><char*>(const char*);
D. string变char*要通过const char*中转。
E. 变成char[]。string逐个赋值,char* const char* strncpy_s()

1、string转char*

把string转换为char* 有3种方法:data(); c_str(); copy();

其中,data()除了返回字符串内容外,不附加结束符‘\0‘,而c_str()返回一个以‘\0’结尾的字符数组。

1) 调用string的data()函数

string str = "hello";
const char* p = str.data();//加const或者用char *p=(char*)str.data();

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

2) 调用string的c_str()函数

string str=“world”;
const char *p = str.c_str();//同上,要加const或者等号右边用char*
//一定要使用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!"

3) 调用string的copy()函数

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

2、char*转string

可以直接赋值

string s;
char *p = "hello";
s = p;

3、string转char[]

不可以直接赋值,可以循环char*字符串逐个字符赋值,也可以使用strcpy_s等函数

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;

4、char[] 转string

可以直接赋值

string s;
char ch[] = "hello world";
s = ch;

5、char[]转char*

可以直接赋值

6、char*转char[]

不能直接赋值,可以循环char*字符串逐个字符赋值,也可以使用strcpy_s等函数。

7、代码实现

1)string转为其他类型
① string转const char*

#include "stdafx.h"
#include <iostream>

int _tmain(intargc, _TCHAR* argv[])
{
    std::string str = "HelloWorld!"; //初始化string类型,并具体赋值
    const char* constc = nullptr;//初始化const char*类型,并赋值为空
    constc= str.c_str();             //string类型转const char*类型
    printf_s("%s\n", str.c_str());   //打印string类型数据 .c_str()
    printf_s("%s\n", constc);        //打印const char*类型数据
    return 0;
}

② string转char*

#include "stdafx.h"
#include <iostream>

int _tmain(intargc, _TCHAR* argv[])
{
    std::string str = "HelloWorld!"; //初始化string类型,并具体赋值
    char* c = nullptr;      //初始化char*类型,并赋值为空
    const char* constc = nullptr;//初始化const char*类型,并赋值为空
    constc= str.c_str();             //string类型转const char*类型
    c= const_cast<char*>(constc);    //const char*类型转char*类型
    printf_s("%s\n", str.c_str());   //打印string类型数据 .c_str()
    printf_s("%s\n",c);              //打印char*类型数据
    return 0;
}

③ string转char[]

#include "stdafx.h"
#include <iostream>

int _tmain(intargc, _TCHAR* argv[])
{
    std::string str = "HelloWorld!"; //初始化string类型,并具体赋值
    char arrc[20] = {0};     //初始化char[]类型,并赋值为空
    for (int i=0; i<str.length();i++) //string类型转char[]类型
    {
        arrc[i]=str[i];
    }
    printf_s("%s\n", str.c_str());    //打印string类型数据 .c_str()
    printf_s("%s\n", arrc);           //打印char[]类型数据
    return 0;
}

2)const char*转为其他类型
① const char*转string

#include "stdafx.h"
#include <iostream>

int _tmain(intargc, _TCHAR* argv[])
{
    const char* constc = "Hello World!"; //初始化const char* 类型
    std::string str;               //初始化string类型
    str= constc;                   //const char*类型转string类型
    printf_s("%s\n", constc);      //打印const char* 类型数据
    printf_s("%s\n", str.c_str()); //打印string类型数据
    return 0;
}

② const char*转char*

#include "stdafx.h"
#include <iostream>

int _tmain(intargc, _TCHAR* argv[])
{
    const char* constc = "Hello World!"; //初始化const char* 类型
    char* c = nullptr;              //初始化char*类型
    c= const_cast<char*>(constc);   //const char*类型转char*类型
    printf_s("%s\n", constc);       //打印const char* 类型数据
    printf_s("%s\n", c);            //打印char*类型数据
    return 0;
}

③ const char*转char[]

#include "stdafx.h"
#include <iostream>

int _tmain(intargc, _TCHAR* argv[])
{
    const char* constc = "Hello World!"; //初始化const char* 类型
    char arrc[20] = { 0 };       //初始化char[]类型,并赋值为空
    strncpy_s(arrc,constc,20);   //const char*类型转char[]类型
    printf_s("%s\n", constc);    //打印const char* 类型数据
    printf_s("%s\n", arrc);      //打印char[]类型数据
    return 0;
}

3)char*转为其他类型
① char*转string

int _tmain(intargc, _TCHAR* argv[])
{
    char* c = "HelloWorld!";       //初始化char* 类型,并具体赋值
    std::string str;               //初始化string类型
    str= c;                        //char*类型转string类型
    printf_s("%s\n", c);           //打印char* 类型数据
    printf_s("%s\n", str.c_str()); //打印string类型数据
    return 0;
}

② char*转const char*

#include "stdafx.h"
#include <iostream>

int _tmain(intargc, _TCHAR* argv[])
{
    char* c = "HelloWorld!";      //初始化char* 类型,并具体赋值
    const char* constc = nullptr; //初始化const char* 类型
    constc= c;                    //char*类型转const char* 类型
    printf_s("%s\n", c);          //打印char* 类型数据
    printf_s("%s\n", constc);     //打印const char* 类型数据
    return 0;
}

③ char*转char[]

#include "stdafx.h"
#include <iostream>

int _tmain(intargc, _TCHAR* argv[])
{
    char* c = "HelloWorld!";  //初始化char* 类型,并具体赋值
    char arrc[20] = { 0 };    //初始化char[] 类型,并具体赋值
    strncpy_s(arrc,c,20);     //char*类型转char[] 类型
    printf_s("%s\n", c);      //打印char* 类型数据
    printf_s("%s\n", arrc);   //打印char[]类型数据
    return 0;
}

4)char[]转为其他类型

#include "stdafx.h"
#include <iostream>

int _tmain(intargc, _TCHAR* argv[])
{
    char arrc[20] = "HelloWorld!";  //初始化char[] 类型,并具体赋值
    std::string str;                //初始化string
    const char* constc = nullptr;   //初始化const char*
    char*c = nullptr;               //初始化char*

    str= arrc;                      //char[]类型转string类型
    constc= arrc;                   //char[]类型转const char* 类型
    c= arrc;                        //char[]类型转char*类型

    printf_s("%s\n", arrc);         //打印char[]类型数据
    printf_s("%s\n", str.c_str());  //打印string类型数据
    printf_s("%s\n", constc);       //打印const char* 类型数据
    printf_s("%s\n", c);            //打印char*类型数据
    return 0;
}

原文地址:https://www.cnblogs.com/kean0048/p/11060559.html

时间: 2024-10-31 13:07:06

const char* to char*(当函数传递参数时)的相关文章

js函数传递参数时,如果是路径类型的参数,里边包含:&#39;\&#39;字符报错

在函数中,传递的参数中有“\”字符,js会将它默认为转义字符串,如果没有出现与他匹配的转义字符串,就会缺失,例如: 将这样的一个字符串作为一个参数:C:\Program Files (x86)\MySQL\MySQL Server 5.7\data\ 传递到函数里边的值就会被默认转化为:C:Program Files (x86)MySQLMySQL Server 5.7data 如果要实现这个参数的精确传递,就需要将字符串进行处理,一般会有两种方式: ①:将字符串里边的 ‘\’ 字符替换成 ‘/

向线程函数传递参数

向线程函数传递参数在构造线程对象时即可完成.但是要记住,默认情况下是把参数拷贝到线程内部,即使在函数中使用的是引用.例如 void f(int i,std::string const &s); std::thread t(f,3,"hello");</span> 上面代码中,函数f的第二个参数是std::string,传递的是char const *会转换为string. 当使用指针指向自动变量时,要特别注意: <span style="font-s

js中函数传递参数,究竟是值传递还是引用传递?

记住真理: js函数传递参数,不管是简单数据类型,还是引用数据类型,都是值传递!! 下面是js红包书里面的例子: function setName(obj) { obj.name = "Nicholas"; obj = new Object(); obj.name = "Greg"; } var person = new Object(); setName(person); alert(person.name); // "Nicholas" 肯定

Delphi过程、函数传递参数的八种方式

Delphi过程函数传递参数的八种方式 Delphi过程.函数传递参数的八种方式,布布扣,bubuko.com

给wxPython事件处理函数传递参数

给wxPython事件处理函数传递参数 2014-04-30 07:47:08segmentfault-博客--点击数:39 最近捣鼓Python,也就自然捣鼓上了wxPython.我曾经用过Qt和Gtk+写GUI,但几乎所有的Python书都告诉我说最好用的是wxPython,我没有尝试PyQt和PyGtk就开始研究wxPython了.在Qt和Gtk+之间我更喜欢Qt,因为它跨平台做得很好,而且商业化也不错.但wxWidget给人的感觉就完全不同了. 如果说wxWidgets相对于Qt有什么优

javascript如何给事件处理函数传递参数

javascript如何给事件处理函数传递参数:在应用中可能需要给注册的事件处理函数传递参数,但是会发现好像无法实现直接传递,下面就简单介绍一下如何给事件处理函数传递参数.先看一段代码实例: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/&

程序猿之---C语言细节27(函数无参数时细节、函数默认返回int型证明、return默认还回值、void指针++操作)

主要内容:函数无参数时细节.函数默认返回int型证明.return默认还回值.void指针++操作 一.函数无参数时细节 函数无参数时应该加上void 在c语言中一个函数 void f(); 在使用时传递参数f(2);没有报错,而在c++中则会报错 最好加上void来明确函数是无参数的 二.函数默认返回类型为int型 见下面程序 三.return默认返回1 细节:return不可返回执行栈内存中的指针,因为该内存在函数体结束时自动销毁 四.void 指针++操作 void *p; p++; //

转载:CI中URI传递参数时,出现:The URI you submitted has disallowed characters.错误。

CI中URI传递参数时,出现:The URI you submitted has disallowed characters.错误.原因:这是由于uri中存在CI不允许的字符. 解决办法: 在config/config.php文件中,找到 复制代码 代码如下: $config['permitted_uri_chars'] = 'a-z 0-9~%.:_/-i'; 在里面添加允许的字符.如我需要添加@符号,则可以这样: 复制代码 代码如下: $config['permitted_uri_chars

利用call与apply向函数传递参数

Js中函数对象都有call与apply两个方法属性,二者使用方法和功能一样,只是传递参数的格式不同,call逐个传递单个参数,apply一次性传递一个参数数组. 这两个方法可以改变函数的调用对象,并且向函数中传递参数.如: function send(str,speak){ speak.call(this,str); //send(~)==window.speak(str),这句话会立即调用执行此函数 } send("你好!",function(strword){ //这里以匿名函数对