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*的情况分析 的相关文章

  • 理解 Java 中 null 和 '\u000' 之间的区别

    我在一本书上读到 Bruce Eckel 的 Thinking in Java 第 4 版 第 47 页 that null等于 u000 然后我想知道到底是什么 u000 实际意思 根据我的理解 零就是什么都没有或没有任何东西 和 u00
  • 为什么从字符串常量到 'char*' 的转换在 C 中有效但在 C++ 中无效

    C 11 标准 ISO IEC 14882 2011 中表示 C 1 1 char p abc valid in C invalid in C 对于 C 来说 这是正常的 因为指向字符串文字的指针是有害的 因为任何修改它的尝试都会导致崩溃
  • C++ 流式传输到 char 数组?

    我目前正在开发一个 C 应用程序 该应用程序使用一个 C 库 需要从我这边实现回调 例如回调定义如下 int onWrite char what char buffer size t size off t offset 我有 std set
  • 将 std::string 转换为 C 函数的 char* 时要注意什么?

    我读过很多帖子询问如何转换 C std string or const std string to a char 将其传递给 C 函数 似乎在执行此操作时有很多警告 人们必须注意字符串是否连续以及许多其他事情 关键是我从来没有真正理解人们需
  • 从字符中获取 KeyCode?

    我需要能够读取字符并获取与其语言和键盘布局相关的键 我知道如何看待文化背景和语言 但是我怎样才能知道像英语中的 S 这样的字母并且知道它在键盘上是什么键呢 或者对于更难的问题 我如何取出字母 并知道它在键盘上的键是什么 用一个示例程序可能比
  • 从文件中读取为 char 数组

    我正在从文件中读取 当我读取时 它会逐行读取并打印它 我想要的正是我想要一个 char 数组来保存文件中的所有字符并打印一次 这是我的代码 if strcmp str 0 0 FILE filecomand char fname 40 ch
  • 你怎么知道用 malloc() 分配多少空间?

    我是一个完全的 C 新手 我来自 C 我一直在学习内存管理和malloc 功能 我也遇到过这段代码 char a persons name malloc sizeof char 2 我不明白这是分配了多少空间a persons name 是
  • Ansichar 和 char 有什么区别? [复制]

    这个问题在这里已经有答案了 我最近遇到了这种数据类型不匹配的情况 这是我以前从未见过的 我希望有人能解释它们是什么以及它们有何不同 我得到的错误是 F2063 DCC 错误 E2010 不兼容的类型 AnsiChar 和 Char 历史上在
  • 我如何将 int 数组转换为字符串数组[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个整数数组 int a 5 5 21 456 1 3 我需要将这些数字存储到char数组 这样 char 数组将具有如下内容 c
  • 使用字符的 for 循环绘制具有特定颜色的多条线

    我想在一张图表上绘制 13 条线 每行代表我的数据的一个子集 按 盆地 列中的字符分组 我所拥有的有效 但我想使用 for 循环使其更有效 输出如下所示 https i stack imgur com gTapP png 可使用的简化数据框
  • 为什么“char **”类型的索引给出整个字符串?

    考虑这个片段 include
  • 希腊字符串的长度大于应有的长度

    我正在编写一个程序 我将一串希腊字符作为输入 当我打印它的 len 时 它输出它的双精度 例如 如果 ch 希腊字符 或 ch printf d strlen ch 输出 4 而不是 2 如果 ch ab 则输出 2 这是怎么回事 您可以使
  • C++:“我的文本”是 std::string、*char 还是 c 字符串?

    我刚刚做了看似的事情新手常见的错误 https stackoverflow com questions 721129 spot the error in this file reading code c 首先我们读到许多教程之一 http
  • Java Char 到其 unicode 十六进制字符串表示形式,反之亦然

    我需要将Java字符的十六进制代码生成为字符串 并稍后再次解析这些字符串 我发现here https stackoverflow com questions 2126378 java convert string uffff into ch
  • 如何在C++中读取一个字节并将字节的ASCII值保存为整数

    我有一个简单的问题让我困惑 Goal 我想从文件中读取给定的字节 比如第一个字节 并用该字节的 ASCII 值创建 int x 因此 例如 如果字节 字符是 a 我希望 x 为 97 十六进制的 61 我有以下读取文件 example tx
  • 尝试在整数后添加字符然后打印结果时出现奇怪的结果

    我正在尝试创建一个简单的欧姆定律计算器 所以我们的想法是你可以填写两个变量 然后它会计算第三个变量 当我创建这个程序时 我发现了一个小问题 我不明白它是如何发生的 不幸的是我无法找到答案 我尝试打印一个显示完整计算的字符串 用户填写的两个变
  • 强制 telnet 客户端进入字符模式

    我有一个应用程序 我接受来自 telnet 客户端的套接字连接 并建立一个简单的键盘驱动的字符 GUI telnet 客户端 至少在 Linux 上 默认为一次一行模式 所以我总是必须这样做 mode char手动 浏览相关 RFC 表明
  • 如何获取字符串的前五个字符

    我读过这个获取第一个字符的问题 https stackoverflow com q 3878820 1716774字符串的 有没有办法从 C 中的字符串中获取前 n 个字符 您可以使用可枚举 Take http msdn microsoft
  • Java中的字符算术

    在玩的过程中 我遇到了一些对我来说似乎很奇怪的事情 以下不是有效的 Java 代码 char x A x x 1 possible loss of precision 因为其中一个操作数是整数 所以另一个操作数被转换为整数 结果无法分配给字
  • C++:获取数组中char元素的索引

    我需要获取数组中的字符数 const char myarray 5 0 a e f c Create array of char int number 0 Create variable number getposition myarray

随机推荐

  • 在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数组