思考起因

这其实又是一篇主要记录过程的博客。

这次引起我对这一块内容的思考的是我自己出的一道题。但是因为这道题以后可能要用于考试,所以暂时不公布具体题目。

总之,在做这道题的时候,又用到了我上次说到的运算符重载。

可是,这次要计算的数字极其巨大,很可能会爆string

所以我这次只好使用char*来重载运算符。

由于直接使用char*运算,在最后不容易把各位合起来(速度较慢),所以我只好选择在合并时,先使用string储存,再把多个string合并到一个char*中。

这样,就会涉及到stringchar*之间的转换。

过程

我以前从来没有使用过stringchar*的转换,对这一块非常不熟悉。于是便去网上搜。

先是看到了这个:

1
2
3
string str;
char* charstr;
charstr=str.c_str();

发现并不能解决问题。

IDE给我的提示是不能使用const char*赋值给char*

自然想到了可以这样:

1
2
3
string str;
char* charstr;
charstr=(char*)str.c_str();

这一次虽然IDE并没有说我语法错误,可是实际效果是仍无法赋值。

从网上又发现了这样的一个函数:

1
str.data()

这个函数返回的是一个string除了末尾的‘\0’之外的字符串。

结果使用之后仍然是返回的const char*,无法赋值。

后来我又从网上的一篇博客中意识到了const char*无法给char*赋值的原因:

因为const char*char*都是指针,如果赋值的话,char*也会指向const char*,这样就会造成const char* 的值被char*改变。

所以,想使用const char*char*赋值,其实是不可能的。

但是有一个函数:

1
strcpy()

所以我们就可以在定义char*的时候先new出来一块新的空间,然后再strcpy一下即可。

这样问题就解决了。

(虽然看起来很简单,但是我调试了将近一天的时间)

结果

所以我们使用string转换为char*的时候,只需要先写一个c_str(),然后再使用strcpy()复制即可。