社区
C++ 语言
帖子详情
明天结贴,不分先后,谁答得全面给50分
darkstar21cn
2005-09-03 04:35:09
#include <string>
using std::string;
void func (char* const in);
int main ()
{
string str = "dklfjdslkfj";
func (str.c_str ());
return 0;
}
void func (char* const in)
{
}
问题自己找。。。。。
...全文
428
15
打赏
收藏
明天结贴,不分先后,谁答得全面给50分
#include using std::string; void func (char* const in); int main () { string str = "dklfjdslkfj"; func (str.c_str ()); return 0; } void func (char* const in) { } 问题自己找。。。。。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yhbttfile
2005-09-04
打赏
举报
回复
的确不值50分。~~
lzp729
2005-09-04
打赏
举报
回复
呵,这种问题也值50分?
jixingzhong
2005-09-04
打赏
举报
回复
const问题,改成void func (const char* in);
Jagen在路上
2005-09-04
打赏
举报
回复
void func (char* const in)
{
}
这里的参数没有必要这么声明,而且也不对。
根据就近匹配原则,const修饰了指针,说明指针不能修改,但是指针指向的数据可以被修改。但是这是属于指针的值传递,本来就修改不了指针的,在此处无任何意义。
然而string.c_str()返回的是const char*类型,这里的const修饰的是char,表明数据不可修改。那么自然const数据不能传递给mutable数据的,因此楼主的代码也是错误的。
由此可见,即多此一举又是错误。
darkstar21cn
2005-09-04
打赏
举报
回复
结贴。本来虚无说的不错,可惜没说完全,相比v41dugu(一步一生) 要全面一些,所以50分就给v41dugu(一步一生) 了。
另:
回复人: lyclowlevel(蓬蒿人) ( ) 信誉:100 2005-09-03 20:54:00 得分: 0
就是const char *不能赋值给char *或char const *
也许你在这也犯了个错误。还是那句“问题自己找”
补充说明:
纯粹灌水者无分
blocked_a_day
2005-09-04
打赏
举报
回复
好贴!
何哀何欢
2005-09-03
打赏
举报
回复
分多就很刁阿?还 “问题自己找”。。。
对了,另外的50分给谁?
lyclowlevel
2005-09-03
打赏
举报
回复
就是const char *不能赋值给char *或char const *
v41dugu
2005-09-03
打赏
举报
回复
对不起,我再补充一点。
如果这个问题是反过来的,就是 将char *const 指针(这里我们叫它p1)传给cosnt char*指针p2.
也就相当于p2=p1;他们同时指向了p1指向的那块内存,这样就没有错。因为p1是指向的那段内存的位置不能改变,而p2是指向的那段内存中的值不能变(也就是其本身可以变,就是它可以不指向这段内存了)。p2如果变化了不会使任何东西产生错误。也就是只要被要求为不能改变的东西不被改变就可以。这里p1指向的地址不能改变,而p2的变化并不会使p1指向的地址变化,所以没错。
而楼主的情况相当于这里的 p1=p2;他们同时指向了p2指向的内存。但是这块内存中的值被定义为不可改变的。所以出错。把两种情况对照起来理解
mituzhishi
2005-09-03
打赏
举报
回复
问题很明显,正如上面所讲的,改正如下:
#include <string>
using std::string;
void func (const char* in);
int main ()
{
string str = "dklfjdslkfj";
func (str.c_str ());
return 0;
}
void func (const char* in)
{
}
v41dugu
2005-09-03
打赏
举报
回复
问题应该就是那个const与非const的问题了
c_str()返回的是一个const char *类型的指针。而你把const char *指针传给char *const指针 当然错了哦
你要搞清楚在指针上面出现的const问题 ,只要你注意不能改变其原来的性质就行了
比如:const int a=1;int *p=&a;
这里就不对了。因为我们先定义了const int型的a.就表明了a 不能被改变,但是你用一个一般的指针p来指向a 的话,虽然不能通过变量名来改变a的值,但是却可以通过*p来改变a的值,所以这样是行不同的。
同样的在你的这个问题中.c_str()返回的const char *指针,而char *const指针是指针本身不能变化,而const char *指针本身是可以变化的,只是不能改变其指向的变量。所以如果传递成功的话,
那么那个 char *const指针就可以改变其指向的对象,但是const char *又说明了其指向对象是不可变的,所以出错
foochow
2005-09-03
打赏
举报
回复
template<class E,
class T = char_traits<E>,
class A = allocator<T> >
class basic_string
{
public:
.........
const E *c_str() const;
.......
protected:
A allocator;
};
一个const变量是不能赋值给一个非const变量的(const char*---->char*)......
别的不知道了,吃饭去....
antijpn
2005-09-03
打赏
举报
回复
是const char*而不是char* const,这个在C++里面肯定是不允许的,C里面默认最高应该是警告
其他的暂时没看出来……
zhouhuahai
2005-09-03
打赏
举报
回复
但是当你把const char *传给 char *const时,按照参数声明来说:
它会认为可以修改指针所指向的内容,这和const char *相矛盾.因此编译器拒绝接受.
zhouhuahai
2005-09-03
打赏
举报
回复
string( basic_string<char> )的c_str()的返回类型是: const char *
而你的func中的参数为char *const类型, 造成了类型不匹配的错误.
要改的话, 应该把func中的参数类型改成:
const char * 即:
void func (const char* in);
顺带提一下:改成这样之后,倒可以把一个char *传递进去.因为参数中的const只是一个指定,是说明在此函数中,不能改动参数(指针)所指向的内容
创业参考
我的梦想是把这些钱像粪土一样撒向创业者的万亩良田,还真的能结出黄金的果实,昨天晚上就结了一坨黄金(一个公司成功退出了)。所以,我正在把中国梦推向纵深,我的中国梦是帮助此时此刻一无所有走投无路的年轻人,...
中国寺庙楹联
①福州涌泉寺弥勒像侧有联:“手上只一金元,你也求,他也求,未知给谁是好; 心中无半点事,朝来拜,夕来拜,究竟为何理由?” ②湖南湘乡县一座庙宇的楹联是:“我若真灵,也不致脚手渐渐残、皮肉点点落; 汝当...
那多的三国事件簿
那多的三国事件簿 02:53 一, 刘玄德卧薪尝胆卖草鞋 天下大势,
分
久必合,合久必
分
。而到了东汉末年,已是到了将
分
未
分
之际。朝野之上,十个太监二十只手遮天,使得当今圣上形如废人;九州之内,却已经暗流汹涌...
刘墉写给女儿的忠告
他谈得非常具体,具体到怎样跟男生打交道、什么时间做什么事情、怎样写好一篇游记、怎样记一个单词等细微问题。他所说的每一种方法我们都能做得到,具有很强的现实操作性。刘墉娓娓道来,妙语连珠,让我们在轻松愉快...
哲理故事三百篇[转]
火鸡吃了一点牛粪,发现它确实给了它足够的力量飞到第一根树枝,第二天,火鸡又吃了更多的牛粪,飞到第二根树枝,两个星期后,火鸡骄傲的飞到了树顶,但不久,一个农夫看到了它,迅速的把它从树上射了下来。...
C++ 语言
64,636
社区成员
250,540
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章