c++ 返回 char*
一段在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*相关推荐
- 关于C语言函数返回char *类型的一些问题
@关于C语言函数返回char *类型的一些问题TOC 关于C语言函数返回char *类型的一些问题 以下是我在写C语言中返回值类型为char *函数时遇到的一些问题,在参考了博客:https://bl ...
- C# 调用C++ dll 返回char*调用方式(StringBuilder乱码)
// CDLLDemo.cpp : 定义 DLL 应用程序的导出函数. // #include "stdafx.h" #include "string.h" # ...
- python 调用c++返回char*
本文列出动态库方式和pybind11方式返回字符串: 1.动态库方式调用: dll = CDLL(r"./hik_client.dll") dll.testchar.restype ...
- 函数中返回char *类型
记录一次比较容易引起混淆的地方. #include <stdio.h> char *str(void) {return "nihao\n"; }int main() { ...
- C++ 函数返回char*
在函数内建立的局部变量在函数结束后会被销毁,所以如何从函数返回函数内新建的char*是一个问题 看一个例子: char* get_char_1(){string s = "abc" ...
- python中char的用法_如何从C++返回char **并使用cType在Python中填充它?
我一直试图从C++返回一个字符串数组到Python,如下:// c++ code extern "C" char** queryTree(char* treename, float ...
- C语言如何返回char类型,函数返回char类型数组,调用 函数后如何接收值?
我现在刚在学C语言,今天想要实现一个功能: 用C语言读取一个文件的指定行,(如读取a.log文件的3--5行),现在实现了读取函数, 但在main函数调用时不知道怎么接收返回的值. 代码如下: #in ...
- C++返回char*第n个位置开始的子字符串
直接令char*的指针+n ,即获得了char*第n个位置的地址 int main(){int n = 3;char* c = "abcdeffffff";char *temp = ...
- c语言 strchr 返回int,为什么strchr需要一个int来找到char?
其原因纯粹是历史的.请注意,在C语言(K& R C)的旧时代,没有功能原型.那些时代的strchr功能将被声明为 char *strchr(); 并以K& R风格定义为 char *s ...
最新文章
- 深入解析Vue组件间通信
- 大话设计模式(十 会修电脑不会修收音机?——聊设计模式原则)
- html写出日出,描写日出优美句子
- oracle instr查询字符串
- java socket 浏览器_Socket实现Java和浏览器交互。
- 解决DOS窗口中文乱码问题
- 周莫凡python_机器学习 | 莫烦Python
- 【C语言入门】ZZULIOJ 1000-1005
- 给年轻工程师的10大忠告
- 2021年春季 PAT乙级(复盘)
- 通过溢出码解锁电脑BIOS密码
- oracle的LAST_DAY()函数
- 加速度随机游走_VIO学习之公式推导——IMU篇
- 服务机器人“大战”进入下半场,竞争焦点变了
- LintCode 2017 光棍节
- Virtual Tablet Mode Switch
- lasso算法及其实现
- H5鼠标拖动事件(drag)
- DGL RDKit | 基于Attentive FP的分子性质线性模型
- 北京中考英语听说计算机考试时间,2019年北京中考英语听说考时间确定
热门文章
- python bootstrap 4_Python3.4+Django1.9+Bootstrap3
- flex 解析json文件_使用 Python 处理 JSON 格式的数据 | Linux 中国
- 织梦网站上传服务器不显示图片,解决织梦后台登陆不显示验证码图片问题
- java打印等边三角市,java 打印菱形和等边三角形
- android 字符串 转公式,java – 在android中将字符串转换为bigdecimal
- 事件触发控制_SystemVerilog线程控制与通信
- 云服务器 生物信息学,云服务器 生物信息学
- 光纤转CAN总线在消防报警主机联网中的应用
- 【渝粤教育】国家开放大学2018年春季 0703-22T经济学基础 参考试题
- 【渝粤教育】 国家开放大学2020年春季 1325妇产科学与儿科护理学 参考试题