如何把char * p 转换成 const char * p;

guishenlong 2009-12-31 02:59:25
如何把char * p 转换成 const char * p;


char aaa[200];

SPRINTF(aaa, "abcdefg=%s,%s",a,b);

我想把aaa转换成const类型怎么办,,增加变量也没关系..

我这样转换:
const char * cc =aaa;


然后用调用接口mmmm(const char * bb,...) 接口的有个参数一定要 const char * 类型 ,


我这样调用mmmm(cc,...);

编译通过,执行出错。
...全文
631 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
guishenlong 2009-12-31
  • 打赏
  • 举报
回复
谢谢,结贴,是要去看看C了,
guishenlong 2009-12-31
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 todo9351 的回复:]
mmm(const char * bb, )
这里的const是保护 bb在函数内部的使用, 你参数用 char * bb 是没有问题的, 不需要转换的。

我想执行错误问题是在其他地方, 像 %s 要注意字符串的结尾'\0'。
[/Quote]


恩,搞晕了,想起来了const char * bb内部保护。
howlet2 2009-12-31
  • 打赏
  • 举报
回复
这是我以前研究用的代码 提供一下参考
#include <iostream>
using namespace std;
class Show //用于演示 const_cast 的类
{
public:
Show(){m_number = 100;}
void Display(void)const{cout << m_number;}
void Change(){cin >> m_number;}
private:
int m_number;
};
////////////////////////////////////////////////////////////////////////////////
//// 研究const_cast 用于指针 ////
////////////////////////////////////////////////////////////////////////////////

void DisplayIntConstPoint() //演示const int *
{
const int j = 100;
int *pj = const_cast<int *>(&j); //可以const_cast把&j的const的属性暂时去处了
*pj = 200; //可以因为pj为非const

//虽然在运行时&j的内容变了但由于编译时编译器将j用100代了所以输出的j不变
cout << *pj << ' ' << j;

int i = 800;
const int *pi = &i; //const 指针

int *p = NULL; //非 const 指针

p = const_cast<int *>(pi); //可以const_cast把pi的const的属性暂时去处了
cin >> *const_cast<int *>(pi); //也可以

cout << *pi << ' ' << *p;

// p = pi; //不行!! pi 还原成了const 属性
}

void DisplayClassConstPoint() //演示const Show *
{
Show object;
const Show *p = &object; //p是常指针不能调用非const成员函数

p->Display(); //可以 Display是const成员函数

const_cast<Show*>(p)->Change(); //可以将p的const的属性暂时去处了

//p->Change(); //再加一次不行!! p 还原成了const 属性
}
//----------------------------------------------------------------------------//

////////////////////////////////////////////////////////////////////////////////
//// 研究const_cast 用于引用 ////
////////////////////////////////////////////////////////////////////////////////
void DisplayIntConstRefer() //演示const int *
{
const int j = 100;
int &rj = const_cast<int &>(j); //可以const_cast把j的const的属性暂时去处了
rj = 200; //可以因为rj为非const

//虽然在运行时&j的内容变了但由于编译时编译器将j用100代了所以输出的j不变
cout << rj << ' ' << j << endl;

int i = 300;
const int &ri = i;
const_cast<int &>(ri) = 400; //可以const_cast把rj的const的属性暂时去处了
cin >> const_cast<int &>(ri); //可以
}

void DisplayClassConstRefer() //演示const Show &
{
Show object;
const Show &r = object; //p是常引用不能调用非const成员函数

r.Display(); //可以 Display是const成员函数

const_cast<Show&>(r).Change(); //可以,将r的const的属性暂时去处了

//r.Change(); //不行!! r 还原成了const 属性
}
////////////////////////////////////////////////////////////////////////////////

int main(int argc, char *argv[])
{

DisplayIntConstRefer();
return 0;
}

/******************************************************************************/
/*总结:
一、const_cast 以指针为型参
*形式 : const_cast<int *>(address) //address是一个地址
*返回值 : 和 address 地址相同但是非 const 的指针
*注意 : 其参数 address 的 const 属性一直都没变

二、const_cast 以指针引用为型参
*形式 :const_cast<int &>(normall) //normall是一个普通变量或引用
*返回值 :和参数占相同内存的非 const &
*注意 :无论是返回值的& 还是参数的& 占的都是同一段内存*/
/******************************************************************************/
howlet2 2009-12-31
  • 打赏
  • 举报
回复
说错了 是const_cast
todo9351 2009-12-31
  • 打赏
  • 举报
回复
mmm(const char * bb, )
这里的const是保护 bb在函数内部的使用, 你参数用 char * bb 是没有问题的, 不需要转换的。

我想执行错误问题是在其他地方, 像 %s 要注意字符串的结尾'\0'。
jiangxc2004 2009-12-31
  • 打赏
  • 举报
回复
有const char *类型的接口都是可以直接接受char *类型数据的,你调用函数的时候,有一个隐式的变量初始化。没必要向你那么做,通过编译证明你的使用方式应该没有错,看看你程序逻辑有没有问题,是不是使用了已经释放的内存,或者是内存越界。
todo9351 2009-12-31
  • 打赏
  • 举报
回复
mmm(const char * bb, )
这里的const是保护 bb在函数内部的使用, 你参数用 char * bb 是没有问题的, 不需要转换的。

我想执行错误问题是在其他地方, 像 %s 要注意字符串的结尾'\0'。
wuyu637 2009-12-31
  • 打赏
  • 举报
回复
编译通过,执行出错,说明出问题的地方不是const char
从本质上讲,const char 和char没有什么区别,区别只是编译过程的检查
howlet2 2009-12-31
  • 打赏
  • 举报
回复
static_const
Ryanwen 2009-12-31
  • 打赏
  • 举报
回复
直接传aaa就可以

mmmm(aaa ,...)
taodm 2009-12-31
  • 打赏
  • 举报
回复
试过直接传aaa没有?
楼主,你需要一本《c和指针》来打好基础。
buptzwp 2009-12-31
  • 打赏
  • 举报
回复
这个不需要转吧。

69,394

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧