(string1+string2).c_str()的问题

图片说明
请问这个 const char *c_p2 = (str1 + str2).c_str();和const char *c_p3 = (str = str1 + str2).c_str();有什么区别 为什么c_p2的第一个字符不显示

2个回答

c_ptr2指向的是一个临时对象。

楼上正解 c_str()这个函数在使用的时候需要注意的地方还是蛮多的
举个例子

 string a="aaa";
    string b="bbb";
    //临时对象被销毁 以前都没想过原来还有残留的数据 按理说应该都是空
    const char *c=(a+b).c_str();
    cout<<*c<<endl;      
    for(string::size_type i=0;i<(a+b).size();i++)
        cout<<c[i];
    cout<<endl;
    //变量依旧存在
    string d=a+b;
    const char *dd=d.c_str();
    cout<<*dd<<endl;
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
如何解决string1=string1 & string2的效率问题
当在循环中不断的在string1上自增时,随着string1逐渐庞大,自增的效率就越来越慢,有什么办法来解决吗?
在string1中查找是否出现string2?
#includernint stringlen(char *s);rnint stringcmp(char *s,char *t);rnint stringend(char *s,char *t);rnint stringin(char *s,char *t);rnrnint stringlen(char *s)rnint n=0;rnwhile(*s++ != '\0')rn++n;rnrnreturn(n);rnrnrnint stringcmp(char *s,char *t)rnfor( ; *s == *t ; s++,t++)rnif(*s == '\0') return 0;rnrnreturn *s-*t;rnrnrnint stringend(char *s,char *t)rnint strlens,strlent;rnstrlens=stringlen(s);rnstrlent=stringlen(t);rns+=strlens-strlent;rnif(stringcmp(s,t))rnreturn 0;rnrnelse return 1;rnrnrnint stringin(char *s,char *t)rnint strlens,strlent,flag=0;rnchar *p;rnstrlens=stringlen(s);rnstrlent=stringlen(t);rnfor(p=s;p<=(s+strlens-strlent);p++)rn*(p+strlent)='\0';rnif(stringcmp(p,t))rnflag=0;rnelsernflag=1;rnbreak;rnrnrn/*rnp=s;rn*(p+strlent)='\0';rnif(stringcmp(p,t))rnreturn 0;rnelsernreturn 1;rn*/rnreturn flag;rnrnrnint main()rnrnint result;rnchar *str1=(char* )malloc(sizeof(char)*128); /*dynamically alloc memory in heap*/rnchar *str2=(char* )malloc(sizeof(char)*64);rnif(str1==NULL || str2==NULL)rnputs("memory alloc fail\n");rnexit(1);rnrnprintf("please input string1:");rngets(str1);rnprintf("please input string2:");rngets(str2);rnresult=stringin(str1,str2);rnif(result)rnprintf("string2 is in string1.byebye\n");rnelsernprintf("string2 is not in string1.byebye\n");rnfree(str1);rnfree(str2);rnstr1=NULL;rnstr2=NULL;rnreturn(0);rnrnrn能不能帮我看一下这个程序,使用stringend( )的时候可以检查string2是不是在string1的尾部,但是使用stingin( )的时候检查不出string2 是不是在string1 里面,请问如何修改stringin( )这个functionrn谢谢 rn
从n开始复制string1到string2
请帮忙分析以下错误,谢谢rn题目要求:rn终端输入string1,n,将string1的内容从n开始复制到string2.以下是代码rnrn 1 #include  rn 2 #include rn 3 #include rn 4 rn 5 void cping(char *, char *, int);rn 6 rn 7 int main(void) rn 8 int m;rn 9 char string1[20], string2[20];rn 10 printf("input string:");rn 11 fgets(string1, 20, stdin);rn 12 setbuf(stdin, NULL);rn 13 printf("which character that begin to copy?");rn 14 scanf("%d", &m);rn 15 rn 16 if (strlen(string1) < m)rn 17 printf("input error!");rn 18 else rn 19 cping(string1, string2, m);rn 20 printf("result:%s\n", string2);rn 21 rn 22 rn 23 rn 24 void cping(char *str1, char *str2, int n)rn 25 rn 26 int i;rn 27 for (i=0; n<=strlen(str1); ++n, ++i) rn 28 *(str2 + i) = *(str1 + n - 1);rn 29 rn 30 rn 31 rnrn运行结果:根据string1,n的不同,有时正确有时错误rnrnroot@NY:~/tempdir# ./copy rninput string:012345678901234567890123456789rnwhich character that begin to copy?4rnresult:3456789012345678$��rnroot@NY:~/tempdir# ./copy rninput string:012345678901234567890123456789rnwhich character that begin to copy?5rnresult:456789012345678
如何判断 string1 是否在 string2 里。
也就是 string1 是否是 string2 的子集。
如何判断string1中是否含有string2的任意字符?
如何判断string1中是否含有string2的任意字符?
perl 正则表达式怎么匹配 string1 或者 string2 或者 string3
一次匹配出一个文件中的 string1 或string2 活string3 字符串
内存中有两个字符串string1和string2,CPU要对它门按位异或,知到string1的内容和地址,怎么能得到string2的地址和内容?
内存中有两个字符串string1和string2,CPU要对它门按位异或,知到string1的内容和地址,怎么能得到string2的地址和内容?
C#string 寻找两个字符串的最长公共子串,string.MaxSubStrng(string1, string2)。
输入连个字符串,然后比较输出,公共字串。rn比如:zhang回车rn : liang回车rn输出:ingrn这个问题困扰我一阵子了,我解决不了rn以前写的代码,比较乱rnnamespace ConsoleApplication2rnrn class Programrn rn static void Main(string[] args)rn rn str strr = new str();rn int i, j;rn Console.WriteLine("请输入第1个字符串:");rn string str1 = Console.ReadLine();rn Console.WriteLine("请输入第2个字符串:");rn string str2 = Console.ReadLine();rn Console.WriteLine("公共字符串:" + strr.gonggong(str1, str2));rn Console.ReadLine();rn public string gonggong(string str1, string str2)rn rn int j;rn int i;rn char[] str3 = new char[1000]; rn for (i = 0; i < str1.Length; i++)rn for (j = i; j < str2.Length; j++)rn if (str1[i] == str2[j])rn str3[i] = str1[i]; return str3;rn rn
求: 请问:在 datawindow 的 setfilter () 中: 如何表示 string1 在 string2 中:
也就是象 sqlserver 的 like.rnrnrn
javascript中如何判断某子串string2是否在string1中?
请教:javascript中如何判断某子串string2是否在string1中?rn我用了帮助里的indexof,可惜不好使,请赐教rn麻烦你了rn
看string1是否在string2里面,用什么函数?
如题,谢谢
将string2含有string1的部分全部高亮显示,怎么办?
我用string2=string2.Replace(string1,""+string1+"");rn才发现它是区分大小写的,而我不想它区分大小写,怎么办?
請問如何判斷STRING1完全包含STRING2內容呢?
請問如何判斷STRING1完全包含STRING2內容呢?rnie:rnString1,String2:String;rnString1:='abcdef';rnString2:='abc';rnrnBecause String1 Include String2, So answer is True.rn
c_str()的问题
在一个TStringList,ls的String中有这样的数组0xd1,0x00,0x00,0xfd,0xFF,计算String长度,0xFF表示结束,我这样写的:rnint codelength;rnchar *p= new char[MAX_PATH];rnstrcpy(p,ls->Strings[i].c_str() );rnwhile(*p != 0xFF)rnrn codelength++;rn p++;rnrn出现的问题是,p指向的位置不对,另外在while比较中,类型不匹配.rn那么怎样才能正确获得指针.
c_str?
error C2039: 'c_str' : is not a member of 'CString'rn c:\program files\microsoft visual studio\vc98\mfc\include\afx.h(368) : see declaration of 'CString'rnrn出现这问题 应该怎么办 请各位指教 谢谢 
c_str();
string str_Name = " Hello World ";rnstring str_Test;rnstr_Test = str_Name 与 str_Test = str_Name.c_str();有区别吗?谢
c_str()
c_str()是个什么函数,怎么用呢?请教大师。rn
String1中包含有String2,如何从String1中删除String2,并返回删除后的结果? 在线等待...立即结贴!
String1中包含有String2,如何从String1中删除String2,并返回删除后的结果? 在线等待...立即结贴!
关于string::c_str()的问题
有函数:rnstring fun()rnrn.........rnrn现在这样使用rnprintf("%s", fun().c_str());rn不知道有没有问题?fun返回的string对象为临时变量,它在函数调用结束便被析构了,所以通过函数c_str返回的const char*指针指向的内存也是无效的,但是为什么这样使用在程序中却没有问题?
string c_str相关问题
[code=c]rn#include rn#include rnrnstd::string TestStr()rnrn std::string ret = "test";rn return ret;rnrnrnvoid main()rnrn std::string teststr = TestStr();rn const char* test = TestStr().c_str();rnrn printf("1: %s\n", test); //输出 空 或 乱码rn printf("2: %s\n", TestStr().c_str()); //输出 "test"rn printf("3: %s\n", teststr.c_str()); //输出 "test"rn system("pause");rnrn[/code]rnrn为什么2和3都能打出"test",但1却打不出来?
c_str()函数问题
c_str()函数用于string与const char*之间的转换,也经常能用到,下面的例子你说输出啥? #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; int main() { string s = "Alexia"; const char *str...
关于c_str()返回值的问题
用c_str()返回的字符串的生命期到底有多长?是与string对象的生命期一样?还是?rn若更改了string对象的内容,存储了更长的字符串,c_str()自动更换了存储地址,那么更改前用c_str()返回的地址还有效么?rnrn#include rnusing namespace std;rnrnstruct Arnrn A(const string &s):str(s) rn const char* fun() return str.c_str();rn const char* const& fun()const return str.c_str(); rn // 为什么说我引用的是临时指针?str是分配有内存空间的啊rn string str;rn;rnrnint main(void)rnrn A a("abc");rn const char *ch=a.fun(); // ch指向的是不是有效内存?rn cout<
关于c_str的问题
error C2039: 'c_str' : is not a member of 'ATL::CStringT'rn1> withrn1> [rn1> BaseType=wchar_t,rn1> StringTraits=StrTraitMFC_DLLrn1> ]rnrn代码:bool CXML_Object::LoadFile( const CString &strFileName)rnrn return LoadFile( strFileName.c_str());rnrnrn请问这是怎么回事呢?例子也是这么写的怎么就没什么问题呢?
string的c_str导致的问题
string的c_str()会返回一个C兼容的字符串,也就是所谓的其内容以null终止的字符指针,这儿的关键问题是这个指针的生命周期如何?更精致的也就是说:它什么时候销毁?它只想的内容什么时候失效?我想来想去,觉得这儿很难处理,似乎除了引入一个微型的GC以外,没有什么别的可能。rnrn由于有好多人只希望看代码,我就举点代码作为例子:rnrnstring content = "Hello, world!";rnrnmbstowcs(wideContentBufferPointer, wideContentBufferLength, content.c_str(), content.length());rnrn上面的content.c_str()会返回一个char*,也就是一个字符指针,指向一个内存区域,那个内存区域的长度为content.length() + 1,内容content这个字符串的内容后跟一个null。首先,主要的问题是:这个内存区域是不是就是content这个字符串类中包含的那个内容所占据的区域呢?我们可以理智的推断,不是。因为,一、那个区域比这个区域的大小小一。二、content类中内容未必在一个内存区域中。那么,这个内存区域就是c_str分配的了。可是,它在什么时候释放呢?不知道。没有办法知道这个char*会在什么时候释放。真是可怕啊。它不会被释放?这是一个内存泄漏吗?不……,好多人都会疯狂的,应该或许大概编译器会在适当的地方插入释放内存的指令吧。可是这是不可能的,这儿只有在运行时才能知道是不是可以释放了。这儿有GC吗?,应该没有。可是究竟怎么才能完成这个魔幻般的动作呢?有人会猜测,会不会实在string类的析构中释放?我觉得这仍然不可取,看看下面的代码:rnrnchar cons* f()rnrn string r;rn //....rn return r.c_str();rnrnrn这段代码会不会出现问题?应该不会吧。rnrn如果会出现问题,那么,我们再看看这样:rnrn//...rnstring* s = new string();rn//...rnchar* data = 0;rnif (condition)rn data = s->c_str();rnelsern data = (char*)malloc(length + 1)rn//...a lot of code use datarnif (condition)rn ; //do nothingrnelsernrn free(data);rn data = 0;rnrn这儿会有双份的内存泄漏吗?rnrn有人说了,c_str不会分配内存的,你上面的那些分析都不对了。可是问题是:如果c_str()不分配内存,它怎么能给内容最后缀上0?或许它内部就有结尾0?可是如果是这样,我们的string显然不能不是连续的,可是,标准上明确地写着它可以是不连续的。rnrn我没有想到什么?谁给我解答一下。
关于 c_str() 问题
AnsiString str1 = "czx ";rnAnsiString str2 = "aaaaaaaaaaaaaaaa";rnStrCopy(str1.c_str(),str2.c_str());rnStrCopy(str2.c_str(), "bbb1224234");rnrn在CB6下,这样做不会出现错误,但是有人说这存在隐患,我有点不太明白,请那位高人给点指点.
string c_str 出错问题
编译无错,运行就cursh了。rn[code=C/C++]rnvoid Log::TRACE( const String & str )rn rn //char curStr[255];rn //strcpy( curStr, str.c_str() );rn //TRACE( curStr ); 这样正确rnrn TRACE( str.c_str() ); //这样为什么不对了?这里会crushrnrn //另外我如果这样处理为什么会出错?rn //char * p = new char[ str.length() ];rn //strcpy( p, str.c_str() );rn //TRACE( p);rn //delete [] p; rn rnrn void Log::TRACE( char * string )rn rn TRACE( Log::NORMAL, string );rn rn void Log::TRACE( Log::LOGTYPE type, char * string )rn rn //最后到这里rn assert( string );rn std::cout << pContent <
AnsiString类的赋值问题?string1=string2 是传值还是传址???
两个AnsiString类的对象rnrn使用下面语句。rnrnAnsiString string1,string2;rnrnstring1="dkjfkdjflksjdf";rnstring2=string1;rnrn这时是传值调用,还是传址调用呢?rnrn我的string2 修改后,string1也同时被修改????
菜问题:为什么 echo "$string1\n$string2"中的\n不换行
环境:win2000,iis5,php4
被准备语句 '(@string1 nvarchar(50),@string2 nvarchar(50),@string3 nvarchar(5' 需要参数 @string1,但未提供该参数
System.Data.SqlClient.SqlException: 被准备语句 '(@string1 nvarchar(50),@string2 nvarchar(50),@string3 nvarchar(5' 需要参数 @string1,但未提供该参数。 at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream) at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() at Whealth.chuli.Page_Load(Object sender, EventArgs e) in F:\wwwroot\Whealth\infor\chuli.aspx.vb:line 714 rnrn其中string1,string2……都已经定义并且赋值了...rn但是出现这个问题请问这是怎么回事>rn
请教一个c_str的问题
string里面存放字符是否连续的? 如果是,是不是就存在于c_str返回的指针指向的地址,强制转换成普通指针后对里面的内容修改会影响什么rnrn如果不是c_str返回的指针指向的地址是string临时分配出来的吗? 什么时候会失效?rnrn
richedit->text->c_str()问题?
本人初学bcb,用richedit控件rn用一个char *p=richedit->text->c_str();rnrn结果发现当内容很少时候返回的字符串p内容不正确.但是字符串长度超过5个一般就正确rnrn无奈使用rnrnchar *p=new char[richedit->Length()];rnfor (int i=0;iLength();i++)rnrn p[i]=richedit->text[i+1];rnrnrn这样得到的p就是正确的字符串,rnrn为什么?rn
c_str()函数的问题
c++primer上面写的.c_str()返回的是一个指针 指向const char, 可是如果输出s.c_str()是一个字符数组rn这是怎么回事呢
bcb6中的c_str()的问题
bcb6中的c_str()的问题rnrnchar *pin = Edit1->Test.c_str();rn然后对pin操作。结果我查看pin,时而正确,时而错误。比如Edit1->Test为111111rn,而pin老是为1111\x14等,少了几位等错误。rnrn问如何保证c_str()的正确性?
新手问个c_str问题
#include rnrn#include rnrnusing namespace std;rnrnint main()rn string abc="oh my god!";rn char *name;rn strcpy(name,abc.c_str());rnrn cout<<*name;rnrnrnrn第一:name不是只是申明了一个指针,并没有分配空间吗,那么strcpy怎么能把abc的内容copy过去?rnrn第二:c_str()后只是char字符嘛,怎么能把一串字符串"oh my god!"转换呢,因为有个函数是void ma(char *)。rnrn第三,abc被c_str()后,成为const char * 不能直接用于(char *) 这应该怎么解决
【20180824】【C/C++基础知识】复写昨天学习的程序(检查在string1中是否包含有string2)
例12:输入两个字符串string1和string2,检查在string1中是否包含有string2。如果有,则输出string2在string1中的起始位置;如果没有,则输出“NO”;如果string2在string1中多次出现,则输出在string1中出现的次数以及每次出现的起始位置。 /* 我写的 */ #include&lt;stdio.h&gt; #include&lt;stdlib...
请问在VC++6.0里,怎样比较字符串string1中,是否包含字符串string2 ?
请问在VC++6.0里,怎样比较字符串string1中,是否包含字符串string2 ?rnrn用什么函数实现?rnrn在线等,谢谢
c_str()的用法
C中没有string,所以函数c_str()就是将C++的string转化为C的字符串数组,c_str()生成一个const char *指针,指向字符串的首地址。 char *p=s[10]; string a="welcome"; strcpy(p,a.c_str()); cout 结果为"welcome".
关于c_str()
string txtline = "12345";rn_strlwr((char *)textline.c_str());rn这样有问题吗?rnc_str()强制成非const再操作会有什么问题吗?
sql语句怎么写:将table中字段name='string1'的记录都改为name='string2'的记录
呵呵,我真的不记得了
如何拆分string,比如string="aa#bb",把它拆成string1="aa",string2="bb";
C++标准库中提供现成的函数吗?
相关热词 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池 c#5.0 安装程序 c# 分页算法