一段在C++里经常犯错误的代码

一个类:

class C{
public:
    C(){}
    ~C(){}
public:
    string a;
    string funa()
    {
        string tmp = "1234";
        return tmp;
    }
};

外部调用类C并使用其成员:

C classc;
char *test1 = classc.a.c_str();
printf("%s\n", test1);

上述正确;如果

C classc;
char *test2 = classc.funca.c_str();
printf("%s\n", test2);

上述不正确,为什么呢?
这 个是C++的特性,此类C中的成员函数funa返回的是一个内部变量,其作用域仅仅在外部调用的栈内有效,而成员变量则栈内外都会有效;也可以这样理解, 针对C++成员函数的返回值,如果是内部变量的返回,需要copy一份(C里面使用strdup函数)才能持久(栈外)有效,这点在C语言里面是相通的。

一般在perl和java语言中,直接使用函数内部的返回值,无论在栈内、外都是没有错的,但是在C++里面需要注意。C语言里面,一般返回char*时需要注意外,一般返回char或者int,这样是可以的。

有些经验丰富的人也会犯这种错误哟,大部分因为各种语言的混合编程后,导致概念的混淆,当然上述的错误例子可能也会编译通过,运行起来也没有错误,但是会造成一个程序崩溃的隐患。

转载于:https://www.cnblogs.com/zhuyc/archive/2011/08/30/2159101.html

c++ 返回 char*相关推荐

  1. 关于C语言函数返回char *类型的一些问题

    @关于C语言函数返回char *类型的一些问题TOC 关于C语言函数返回char *类型的一些问题 以下是我在写C语言中返回值类型为char *函数时遇到的一些问题,在参考了博客:https://bl ...

  2. C# 调用C++ dll 返回char*调用方式(StringBuilder乱码)

    // CDLLDemo.cpp : 定义 DLL 应用程序的导出函数. // #include "stdafx.h" #include "string.h" # ...

  3. python 调用c++返回char*

    本文列出动态库方式和pybind11方式返回字符串: 1.动态库方式调用: dll = CDLL(r"./hik_client.dll") dll.testchar.restype ...

  4. 函数中返回char *类型

    记录一次比较容易引起混淆的地方. #include <stdio.h> char *str(void) {return "nihao\n"; }int main() { ...

  5. C++ 函数返回char*

    在函数内建立的局部变量在函数结束后会被销毁,所以如何从函数返回函数内新建的char*是一个问题 看一个例子: char* get_char_1(){string s = "abc" ...

  6. python中char的用法_如何从C++返回char **并使用cType在Python中填充它?

    我一直试图从C++返回一个字符串数组到Python,如下:// c++ code extern "C" char** queryTree(char* treename, float ...

  7. C语言如何返回char类型,函数返回char类型数组,调用 函数后如何接收值?

    我现在刚在学C语言,今天想要实现一个功能: 用C语言读取一个文件的指定行,(如读取a.log文件的3--5行),现在实现了读取函数, 但在main函数调用时不知道怎么接收返回的值. 代码如下: #in ...

  8. C++返回char*第n个位置开始的子字符串

    直接令char*的指针+n ,即获得了char*第n个位置的地址 int main(){int n = 3;char* c = "abcdeffffff";char *temp = ...

  9. c语言 strchr 返回int,为什么strchr需要一个int来找到char?

    其原因纯粹是历史的.请注意,在C语言(K& R C)的旧时代,没有功能原型.那些时代的strchr功能将被声明为 char *strchr(); 并以K& R风格定义为 char *s ...

最新文章

  1. 深入解析Vue组件间通信
  2. 大话设计模式(十 会修电脑不会修收音机?——聊设计模式原则)
  3. html写出日出,描写日出优美句子
  4. oracle instr查询字符串
  5. java socket 浏览器_Socket实现Java和浏览器交互。
  6. 解决DOS窗口中文乱码问题
  7. 周莫凡python_机器学习 | 莫烦Python
  8. 【C语言入门】ZZULIOJ 1000-1005
  9. 给年轻工程师的10大忠告
  10. 2021年春季 PAT乙级(复盘)
  11. 通过溢出码解锁电脑BIOS密码
  12. oracle的LAST_DAY()函数
  13. 加速度随机游走_VIO学习之公式推导——IMU篇
  14. 服务机器人“大战”进入下半场,竞争焦点变了
  15. LintCode 2017 光棍节
  16. Virtual Tablet Mode Switch
  17. lasso算法及其实现
  18. H5鼠标拖动事件(drag)
  19. DGL RDKit | 基于Attentive FP的分子性质线性模型
  20. 北京中考英语听说计算机考试时间,2019年北京中考英语听说考时间确定

热门文章

  1. python bootstrap 4_Python3.4+Django1.9+Bootstrap3
  2. flex 解析json文件_使用 Python 处理 JSON 格式的数据 | Linux 中国
  3. 织梦网站上传服务器不显示图片,解决织梦后台登陆不显示验证码图片问题
  4. java打印等边三角市,java 打印菱形和等边三角形
  5. android 字符串 转公式,java – 在android中将字符串转换为bigdecimal
  6. 事件触发控制_SystemVerilog线程控制与通信
  7. 云服务器 生物信息学,云服务器 生物信息学
  8. 光纤转CAN总线在消防报警主机联网中的应用
  9. 【渝粤教育】国家开放大学2018年春季 0703-22T经济学基础 参考试题
  10. 【渝粤教育】 国家开放大学2020年春季 1325妇产科学与儿科护理学 参考试题