c++中怎么获取字符串的首地址,或者说将字符串赋给指针?

c++中,我先从文本中获取字符串ifstreamin("change.txt");for(strings;getline(in,s);)然后,我想讲字符串s赋给指针*st... c++中,我先从文本中获取字符串
ifstream in("change.txt");
for(string s;getline(in,s); )

然后,我想讲字符串s赋给指针*str,用下边这个语句可以吗?
char *str=&s;
展开
 我来答
8826055
2015-09-16 · TA获得超过7509个赞
知道大有可为答主
回答量:1680
采纳率:81%
帮助的人:880万
展开全部

如果想将string转换成指针,可以使用string类的c_str函数。c_str()返回const char*,指向一个字符数组,数组里存的字符串就是原string的值,而且最后以'\0'结尾。不过由于是const char*,无法修改。

样例程序(摘自http://www.cplusplus.com/reference/string/string/c_str/):

// strings and c-strings
#include <iostream>
#include <cstring>
#include <string>

int main ()
{
  std::string str ("Please split this sentence into tokens");

  char * cstr = new char [str.length()+1];
  std::strcpy (cstr, str.c_str());

  // cstr now contains a c-string copy of str

  char * p = std::strtok (cstr," ");
  while (p!=0)
  {
    std::cout << p << '\n';
    p = std::strtok(NULL," ");
  }

  delete[] cstr;
  return 0;
}


当然如果只是单纯地想得到首字符的地址,可以先找到首字符,然后用&取地址。

样例程序:

#include <iostream>
#include <string>

int main()
{
      std::string s = "test";
      char *p1 = &s[0];
      *p1 = 'b';
      std::cout << s << std::endl; //best
      char *p2 = &s.at(0);
      *p2 = 'f';
      std::cout << s << std::endl; //fest
      char *p3 = &s.front();       //仅C++11及以上支持
      *p3 = 'r';
      std::cout << s << std::endl; //rest
      return 0;
}
if渲染
2012-10-26 · 超过27用户采纳过TA的回答
知道答主
回答量:114
采纳率:0%
帮助的人:62.9万
展开全部
char *str = (char*)s.c_str();
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kaixingui2012
2012-10-25 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6263万
展开全部
char *str=s.c_str() ;
更多追问追答
追问
也不行
error C2440: 'initializing' : cannot convert from 'const char *' to 'char *'
Conversion loses qualifiers
追答
const char *str=s.c_str() ; //这样不允许改这个变量的里的数据,不知道你是不是会修改其中的内容
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百_大胡子_度
2012-10-25 · 超过22用户采纳过TA的回答
知道答主
回答量:90
采纳率:0%
帮助的人:67.4万
展开全部
char *str=s
追问
不行啊
error C2440: 'initializing' : cannot convert from 'class std::basic_string,class std::allocator >' to 'char *'
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式