c语言中返回值为char*的情况分析

2023-05-16

 容易出错的地方在于:指针作为返回值,但是指针指向的内存单元在函数返回后,内存单元释放了,这样就导致了指针成了野指针了!!!

//这样会报错,因为str数组元素为局部变量,存储在栈内,函数结束后,内容失效
char* func(char* name)
{
    char str[5];
    strcpy(str,name);
    return str;
}

 错误分析:

str为地址,返回值为char*,是进行了值传递,没有问题,但是,数组中的元素为局部变量,存储在栈中,函数外无效。

 1、解决方法1:将数组定义为static

char* func(char *name)
{
   static char str[5];
   strcpy(str,name);
   return str;
}

2、解决方法2:字符串为静态常量//存储在常量区

char* func()
{
    char *str= “hello”;
    //char str[]= "hello";
    return str;
}

3、解决方法3:设置为动态数组

char* func(char* name)
{
    char *str= (char*)malloc(5*sizeof(char));
    strcpy(str,name);
    return str;
}

4、解决方法4:设置为全局变量

char str[10];
char* func(char* name)
{
    strcpy(str,name);
    return str;
}

 小结:通过以上方法,返回字符串,只要返回字符串首地址即可。

1)调用函数时,若直接输出的话,用一个字符指针接收即可:char *result = func();    cout <<result;

从从传出的首地址开始打印字符串,直至‘\0’。

2)调用函数时,若要获取返回的的字符串:

char result[5];

strcpy(result,func());

总结:1)字符串的赋值,需要使用strcpy()函数。

2)上述分析,实质为函数返回值为指针的情况,详细见该文。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c语言中返回值为char*的情况分析 的相关文章

随机推荐

  • 在tinycorelinux上安装lxc,lxd (1)

    本文关键字 xff0c 在tinycorelinux上安装lxc xff0c lxd gcc4 4 self reference struct typedef 在前面的文章中我们讲到过内置虚拟化的os设计 xff0c 它可以使包括裸金属 x
  • STM32上第一个程序-GPIO控制LED-第3季第5部分-朱有鹏-专题视频课程

    STM32上第一个程序 GPIO控制LED 第3季第5部分 759人已学习 课程介绍 本课程是 朱有鹏老师单片机完全学习系列课程 第3季第5个课程 xff0c 从零开始带大家写代码控制板载LED xff0c 并且用三个版本的开发板都实现了功
  • Cas 5.3x cas-overlay-template用iframe实现登录跳转

    Cas 5 3x cas overlay template用iframe实现登录跳转 在上一篇Cas 5 3x 简单配置 xff0c 解决https访问的问题的基础上 xff0c 我尝试了一下如何用iframe实现登录和跳转 xff0c 因
  • Linux自带防火墙基本使用

    文章目录 四 Linux自带防火墙1 查看linux的防火墙状态2 查看已经对外开放的端口3 开放端口 重载防火墙配置4 filewalld常用命令 四 Linux自带防火墙 前言 xff1a CentOS7 端口的开放关闭查看都是用防火墙
  • BGP边界网关协议基础知识点

    BGP xff1a 边界网关协议 AS 自治系统 由单一机构或组织管理的一系列IP网络机器设备的集合 网络范围太大 xff0c 协议跑不过来 xff0c 需要进行划分自治管理 为了方便区分和标定不同AS xff0c 我们给每个自治系统设计了
  • 温湿度传感器SHTC3驱动开发(一)小白也能轻松理解

    一 首先了解设备硬件原理图 首先在公司干活 xff0c 要你开发一个设备驱动 xff0c 那你的老大必须得给你的东西如下 xff1a 开发板主板硬件原理图驱动设备的硬件原理图驱动的设备的数据手册 xff08 datasheet xff09
  • nodejs的版本管理工具(nvm)

    1 nvm是什么 nvm全名node js version management xff0c 顾名思义是一个nodejs的版本管理工具 为了解决node各种版本存在不兼容现象 nvm是让你在同一台机器上安装和切换不同版本的node的工具 x
  • A变为a和a的ASCII值

    span class hljs comment include lt stdio h gt span main char ch span class hljs keyword printf span span class hljs stri
  • 机器学习python Kmeans聚类

    import numpy as np import matplotlib pyplot as plt import pandas as pd from sklearn cluster import KMeans from sklearn i
  • 为wget命令设置代理

    实验环境 xff1a ubuntu 12 04 LTS goagent 方法一 在环境变量中设置代理 export http proxy 61 http 127 0 0 1 8087 方法二 使用配置文件 为wget使用代理 xff0c 可
  • ubuntu14.04安裝numpy,scipy

    在windows下搞python xff0c 实在出错太多 xff0c 就安装了双系统 xff0c 在ubuntu下试着学习一下 xff0c 我的ubuntu版本为ubuntu14 04 以前不知道python的这些包之间是有依赖关系的 x
  • STM32的中断体系和FSMC控制LCD-第3季第7部分视频课程-朱有鹏-专题视频课程

    STM32的中断体系和FSMC控制LCD 第3季第7部分视频课程 861人已学习 课程介绍 本课程是 朱有鹏老师单片机完全学习系列课程 第3季第7个课程 xff0c 本课程详细讲解STM32的外部中断和FSMC模块 xff0c 这两个模块都
  • ubuntu加入Windows的AD域(使用Samba和Winbind的方式)

    ubuntu加入Windows的AD域 Integrate Ubuntu 16 04 to AD as a Domain Member with Samba and Winbind Part 8 Step 1 Initial Configu
  • XTU 1262 Fish(优先队列+贪心)

    钓鱼 http 202 197 224 59 exam index php problem read id 1262 题目描述 小明很喜欢钓鱼 xff0c 现在有n个池塘可以钓鱼 xff0c 第i个池塘首次内能钓到ai条鱼 第i个池塘如果被
  • webpack开发调试模式devtool

    devtool 有7种模式 eval 文档上解释的很明白 xff0c 每个模块都封装到 eval 包裹起来 xff0c 并在后面添加 sourceURL source map 这是最原始的 source map 实现方式 xff0c 其实现
  • HDFS 集成 Kerberos

    本文主要记录 CDH Hadoop 集群上配置 HDFS 集成 Kerberos 的过程 xff0c 包括 Kerberos 的安装和 Hadoop 相关配置修改说明 注意 xff1a 下面第一 二部分内容 xff0c 摘抄自 Hadoop
  • html实现自动清理js、css文件的缓存

    方法如下 xff1a 1 手动清除浏览器缓存 xff1b 2 添加版本号 方法一 xff1a 可以通过js自动给html添加版本号 lt script type 61 34 text javascript 34 gt document wr
  • 虚拟机在nat模式下无法连接网络

    问题导入 在vmware下使用虚拟机由于某些原因设置了静态IP但是在后续的使用发现无法创建新的ssh连接 xff08 之前建立过连接并保存了密钥的仍可连接 xff09 xff0c 同时发现了主机网络可以正常ping通虚拟机的网络 xff0c
  • 74HC573芯片简介

    芯片缺口方向 为正 xff0c 然后左上往下排列 xff0c 最后一个是GND xff0c 然后 向右 xff0c 再向右上 xff0c 右上角为Vcc GND 和Vcc成对角线 xff0c 是为了防止发生短路 LE xff1a latch
  • c语言中返回值为char*的情况分析

    容易出错的地方在于 xff1a 指针作为返回值 xff0c 但是指针指向的内存单元在函数返回后 xff0c 内存单元释放了 xff0c 这样就导致了指针成了野指针了 xff01 xff01 xff01 这样会报错 xff0c 因为str数组