如31行和32行,使用cont输出不会产生乱码,使用printf输出则会产生乱码,为什么?
因为你的 GetA1() 这个函数返回的是对该函数内临时变量的引用(可以理解为一个指向该变量的指针),因此当 GetA1 返回的时候,这个引用指向的变量,已经在生命周期上是“dead”(或者说,该存储空间可以被再次分配的意思)的状态。
因此本质上并不是 printf 和 cout 之间有什么特别的区别,而是你看到正常的输出,那只是说明你的“运气”比较好,后续的函数调用“未能”复写你的引用指向的内存区域而已。而“乱码”才是你应该认为是你这样定义的函数导致的一种“必然”后果。
string str = "6666666";
cout<<str<<endl;
printf("%s", str.c_str());
因为printf里面要求是char类型,string和char是不一样的
这个代码本身写的就有问题,函数不能返回局部变量的引用,这样的代码没有意义,而且会引起segmentfault
因为你 GetA1 函数写错了,返回出了错误,自然就错了