string 变量与 char * a[] 之间转换的问题

yu3350360 2011-07-07 04:14:57


typedef const char* cString;
static const cString cS[];

typedef map<INT32U,const GUI_ConstString* > MAPSTRLST ;

MAPSTRLST StrLst; //类中声明的

typedef vector <string> cs;

cs ss;
如何将ss的字符串转换到 STEXT中

AddStr(ulID,STEXT);//STEXT该如何声明
AddStr(INT32U ulID,const cString* s)
{
StrLst[ulID] = s;
}
...全文
165 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
luciferisnotsatan 2011-07-07
  • 打赏
  • 举报
回复
要存字符串,还是直接用string吧。map<int,string> mp;
luciferisnotsatan 2011-07-07
  • 打赏
  • 举报
回复

无法从“const char *”转换为“const char *”

这两个类型不是一样的么?
string str = "aaa";
map<int,const char*> mp;
mp[1] = str.c_str();
char sz[2048] = {0};
memset(sz,'b',2047);
str = sz;
cout<<mp[1];

编译没问题。不过这么做还是有风险的。如果之后str改变了,可能导致mp[1] = str.c_str();时放进去的指针变成野指针。
ryfdizuo 2011-07-07
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 yu3350360 的回复:]
引用 10 楼 luciferisnotsatan 的回复:
static const cString cS[];
const的,没初始化,那不等于没用???

代码真乱。

char * a[] 是一个char*的数组,也就是有一组字符串
而string则是一个字符串,两者概念上不一样。

char * 和 string互转
char *a = str.c_str();
s……
[/Quote]
lz你那个map定义本身就有问题,直接map<INT32U, string> 吧。
yu3350360 2011-07-07
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 luciferisnotsatan 的回复:]
static const cString cS[];
const的,没初始化,那不等于没用???

代码真乱。

char * a[] 是一个char*的数组,也就是有一组字符串
而string则是一个字符串,两者概念上不一样。

char * 和 string互转
char *a = str.c_str();
str = a;
[/Quote]
谢谢各位,是我没把问题描述清楚
等我理清了在问吧
另外


修改一下函数:
AddStr(ulID, ss[i] ); //i为vector的下标。
void AddStr(INT32U ulID, const string& s)
{
StrLst[ulID] = s.c_str();
}


error C2440: “=”: 无法从“const char *”转换为“const char *”
luciferisnotsatan 2011-07-07
  • 打赏
  • 举报
回复
static const cString cS[];
const的,没初始化,那不等于没用???

代码真乱。

char * a[] 是一个char*的数组,也就是有一组字符串
而string则是一个字符串,两者概念上不一样。

char * 和 string互转
char *a = str.c_str();
str = a;
ryfdizuo 2011-07-07
  • 打赏
  • 举报
回复
typedef map<INT32U,const GUI_ConstString* > MAPSTRLST
这样问题很多的。。。
参考这里:http://topic.csdn.net/u/20110706/18/4e8e2ae7-72a3-4ad0-9655-4448e23340cf.html?65965
ryfdizuo 2011-07-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 yu3350360 的回复:]
就是想中间做个转换,ss中的字符串保存至StrLst中
[/Quote]
这个转化有意义吗?vector本身也是一种id的映射啊。。。你
typedef map<INT32U,const GUI_ConstString* > MAPSTRLST 也是int => const char*
而且const char*默认比较方式比较地址,还得重载比较运算符。。。问题多多,,,
typedef map<INT32U, string > MAPSTRLST 这样定义或者压根转化就没意义。。。
yu3350360 2011-07-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 dizuo 的回复:]
vector<string>没法转化成字符串数组。
对于
typedef map<INT32U,const GUI_ConstString* > MAPSTRLST ;
修改一下函数:
AddStr(ulID, ss[i] ); //i为vector的下标。
void AddStr(INT32U ulID, const string& s)
{
StrLst[ulID] = ……
[/Quote]
测试下看看吧
赵4老师 2011-07-07
  • 打赏
  • 举报
回复
string
typedef basic_string<char> string;
The type describes a specialization of template class basic_string for elements of type char.

basic_string::basic_string
basic_string(const E *s, const A& al = A());
basic_string(const E *s, size_type n, const A& al = A());
basic_string(const basic_string& rhs);
basic_string(const basic_string& rhs, size_type pos, size_type n, const A& al = A());
basic_string(size_type n, E c, const A& al = A());
explicit basic_string(const A& al = A());
basic_string(const_iterator first, const_iterator last, const A& al = A());
yu3350360 2011-07-07
  • 打赏
  • 举报
回复
就是想中间做个转换,ss中的字符串保存至StrLst中
ryfdizuo 2011-07-07
  • 打赏
  • 举报
回复
vector<string>没法转化成字符串数组。
对于
typedef map<INT32U,const GUI_ConstString* > MAPSTRLST ;
修改一下函数:
AddStr(ulID, ss[i] ); //i为vector的下标。
void AddStr(INT32U ulID, const string& s)
{
StrLst[ulID] = s.c_str();
}

就想叫yoko 2011-07-07
  • 打赏
  • 举报
回复
你是出了个推理题
问题是线索不够 无法推导
GUI_ConstString 是什么
yu3350360 2011-07-07
  • 打赏
  • 举报
回复
额···
然后呢
luciferisnotsatan 2011-07-07
  • 打赏
  • 举报
回复
string的c_str()成员函数返回 const char *

typedef const char* cString;
AddStr(INT32U ulID,const cString* s)
不成了
char **了?

64,678

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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