思考起因
这其实又是一篇主要记录过程的博客。
这次引起我对这一块内容的思考的是我自己出的一道题。但是因为这道题以后可能要用于考试,所以暂时不公布具体题目。
总之,在做这道题的时候,又用到了我上次说到的运算符重载。
可是,这次要计算的数字极其巨大,很可能会爆string。
所以我这次只好使用char*来重载运算符。
由于直接使用char*运算,在最后不容易把各位合起来(速度较慢),所以我只好选择在合并时,先使用string储存,再把多个string合并到一个char*中。
这样,就会涉及到string与char*之间的转换。
过程
我以前从来没有使用过string到char*的转换,对这一块非常不熟悉。于是便去网上搜。
先是看到了这个:
1 | string str; |
发现并不能解决问题。
IDE给我的提示是不能使用const char*赋值给char*。
自然想到了可以这样:
1 | string 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()复制即可。





