指针-关于c++中c_str函数的一些问题

问题描述

关于c++中c_str函数的一些问题

1.“c_str返回的是临时指针,不能对其操作”这句话是什么意思,临时指针是像传值一样的拷贝吗,存在于临时栈区的那种
2.一个string被c_str函数作用后会被析构??为什么我自己运行出来不是这样子的,下面附图

解决方案

  1. c_str()返回的是const char*指针,所以不能用该指针改变其指向的对象。例如你的string对象是1234,你希望修改成2234,那你是不能用string函数的c_str返回值来修改它的。
  2. 不是string对象在调用c_str后会被析构,而是string对象在其作用期结束的时候被析构(无论是否调用c_str)。但如果你用c_str获得了一个指针,而这个指针的作用期比string对象长,那么在string被析构后这个指针还存在,而指针指向的位置已经无效了。这就会出问题。大概是这样:

    const char* func(){
    string s = "1234";
    return s.c_str();
    }

    这个函数是不正确的,因为在func返回的时候,s会被析构。所以你返回的const char*指针,指向了一个无效区域。(注意,这个无效区域可能暂时没有被新数据覆盖,所以你在函数返回后立刻访问这个指针对象,不见得会出错,但这个区域迟早会被覆盖的。)

解决方案二:

C++中的c_str函数
c_str()函数
c_str函数

时间: 2024-10-17 22:34:13

指针-关于c++中c_str函数的一些问题的相关文章

c str-c++中c_str()函数--一道简单的机试题

问题描述 c++中c_str()函数--一道简单的机试题 题目描述:输入一个字符串,长度小于等于200,然后将输出按字符顺序升序排序后的字符串.输入:测试数据有多组,输入字符串.输出:对于每组输入输出处理后的结果.样例输入:bacd样例输出:abcd源代码: #include#include#include#include#includeusing namespace std; int main() { int i = 0jnum; string in; char* arr = new char

C++中的函数指针与函数对象的总结

以下是对C++中的函数指针与函数对象的使用进行了详细的分析介绍,需要的朋友可以参考下   篇一.函数指针函数指针:是指向函数的指针变量,在C编译时,每一个函数都有一个入口地址,那么这个指向这个函数的函数指针便指向这个地址. 函数指针的用途是很大的,主要有两个作用:用作调用函数和做函数的参数. 函数指针的声明方法:数据类型标志符 (指针变量名) (形参列表): 一般函数的声明为: int func ( int x );而一个函数指针的声明方法为:int (*func) (int x);前面的那个(

ucosiii中关于函数参数枚举指针

问题描述 ucosiii中关于函数参数枚举指针 这个指针不是要等这个函数运行结束,根据运行的结果,把结果赋值给他吗?为什么在函数的前面就判断了呢? 解决方案 http://blog.sina.com.cn/s/blog_98ee3a930102v9pi.html 解决方案二: 指针作为函数参数指针与函数参数指针作为函数参数(备忘)

C++编程中的函数指针初步解析_C 语言

1.定义每一个函数都占用一段内存单元,它们有一个起始地址,指向函数入口地址的指针称为函数指针.2.语法指向函数的指针变量的一般定义形式为: 数据类型 (*指针变量名)(参数表);3.说明1) 函数指针的定义形式中的数据类型是指函数的返回值的类型. 2) 区分下面两个语句: int (*p)(int a, int b); //p是一个指向函数的指针变量,所指函数的返回值类型为整型 int *p(int a, int b); //p是函数名,此函数的返回值类型为整型指针 3) 指向函数的指针变量不是

C语言结构体中的函数指针

引言 指针是C语言的重要组成部分, 于是深入理解指针并且高效地使用指针可以使程序员写出更加老练的程序.我们要记住指针是一个指向内存地址的变量.指针可以引用如int.char--常见的数据类型,例如: int * intptr; // 声明一个指向整型值的指针 int intval = 5 ; // 定义一个整型变量 intptr = & intval ; // intptr现在包含intval的地址 指针不仅仅指向常规的类型还可以指向函数 函数指针 函数指针的内容不难理解,不再赘述,参见<C

以一个链表指针作参数传入一个函数里,若此时链表为空,则初始化链表,为什么在主函数中不能用?

问题描述 以一个链表指针作参数传入一个函数里,若此时链表为空,则初始化链表,为什么在主函数中不能用? #include using namespace std; typedef struct Node { int age; struct Node* next; }LIST; void addList1(LIST* pHead,int x)//链表结尾加节点 { LIST* pM=new LIST();//新节点 pM->age=x; pM->next=NULL; if(pHead==NULL)

c++动态连接库中的函数返回值为指针,请问在主程序中如何调用这个库的函数。

问题描述 c++动态连接库中的函数返回值为指针,请问在主程序中如何调用这个库的函数. [code=c]extern "C" int __declspec(dllexport)add(int x, int y); extern "C" int __declspec(dllexport)*add1(); int add(int x, int y) { return x + y; } int *add1() { static int a[3]={1,2,3}; stati

类 函数指针 c++-关于类中使用函数指针的疑问

问题描述 关于类中使用函数指针的疑问 class A { typedef int (*fun)(void); public: void Test(fun fun1) { (*fun1)(); }; static int add(void) { std::cout<<"A::add()"<<std::endl; return 2; } }; 我把typedef int (*fun)(void);这句话放在最下面的时候,会出现未声明的错误,记得如果是其他变量放在最下

浅析C++中的函数与指针_C 语言

用函数指针变量调用函数 指针变量也可以指向一个函数.一个函数在编译时被分配给一个入口地址.这个函数入口地址就称为函数的指针.可以用一个指针变量指向函数,然后通过该指针变量调用此函数. 例 求a和b中的大者. 先按一般方法写程序: #include <iostream> using namespace std; int main() { int max(int x,int y); //函数声明 int a,b,m; cin>>a>>b; m=max(a,b); //调用函