字符串--从函数返回字符串指针

news2024/11/16 5:40:10

许多字符串处理函数是不需要返回值的,但实际上它们都被设计成了有返回值的函数。例如字符串赋值函数的函数原型为:

char *strcpy(char *str1, const char *str2);

字符串连接函数strcat()的函数原型为;

char *strcat(char *str1,const char *str2);

这两个函数返回的都是字符指针str1,即存储字符串str1的内存空间的首地址,为什么要这样设计字符串处理函数呢?
其实,这样的设计并非是多此一举,它的主要目的是为了增加使用时的灵活性,如支持表达式的链式表达,方便一些级联操作
例如,可将下面两条语句:

strcat(str1,"Hello China");
len = strlen(str1);

直接写成:

len = strlen(strcat(str1,"Hello China"));

再如,我们可将

strcat(str1,str2);
printf("%s",str1);

直接写成:
printf(“%s”,strcat(str1,str2));
函数之间的握手(信息交换)是通过函数参数和返回值来实现的。因此设计一个函数时,必须首先考虑有几个参数,分别是什么数据类型;同时还要考虑函数返回值的类型,即函数调用完成后,应当返回给调用者什么样的结果。
函数返回值可以是一个数值运算的结果值,也可以是一个代表函数调用成功或失败的逻辑值(True或False,在C语言中分别用非0和0表示)。但是函数只能返回一个值,如何从函数返回一组值(数组或字符串)呢?
一种常见的方法是利用数组或者指针作为函数参数,通过传地址调用来获得这些数据值,另一种方法就通过返回指针值得函数来返回一个地址值,即只想存储器这些数据的一段连续内存空间得首地址,从而获得这些数据值。
返回指针值得函数得定义方式与以前定义函数得方式基本相同,唯一不同的是在函数名的前面多了一个“*”号。例如,可按如下方式来声明一个返回指针值得函数:
char *mystrcat(char *dststr,const char * srcstr);
这里mystrcat是函数名,因为()在C语言中具有最高的优先级,所以mystrcat将首先与()结合,表示mystrcat()是一个函数,他有两个形参dststr和srcstr,*号作为一元运算符比()得优先级稍低,所以他说明函数得返回值是一个字符指针。

例题:不适用字符串处理函数strcat(),编程实现strcat()得功能。(返回字符串指针)

#include <stdio.h>
#define N 80
char *mystrcat(char *dststr,char *srcstr);
int main(void)
{
	char first[2*N]; 
	char second[N];
	printf("Input the first string:");
	gets(first);
	printf("Input the second string:");
	gets(second);
	printf("The result is :%s\n",mystrcat(first,second));
	return 0;
}

char *mystrcat(char *dststr,char *srcstr)
{
	char *pstr = dststr;
	while(*dststr!='\0')//计算第一个字符串长度。 
	{
		dststr++;
	}
	for(;*srcstr!='\0';dststr++,srcstr++)// 从first得空位置开始复制第二个字符串。
	{
		*dststr = *srcstr;
	}
	*dststr='\0';
	return pstr;
}

iti

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/655640.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springboot+vue+java旅行社旅游网站g748u

使用Spring作为项目管理工具对系统的设计与实现各个模块进行管理,优化代码结构。后台采用Java语言开发,前台页面和后台管理页面使用Bootstrap,JSP,JavaScript,HTML,CSS等技术开发,使用MySql作为数据持久化存储工具对系统的设计与实现的用户等角色权限对应的功能等进行存储。使用…

图像细化原理

1. 图像细化原理 Zhang-Suen 算法原理 Zhang-Suen 算法每运行一次&#xff0c; 需要遍历所有的不为0的像素。在对每个像素&#xff08;P1&#xff09;进行删除或保留的判断时&#xff0c;我们需要关注其周围的8个邻居像素&#xff08;P2, P3, P4, P5, P6, P7, P8&#xff09;的…

012、数据库管理之cluster部署

cluster部署 硬件要求操作系统要求依赖包要求部署的组件 部署集群前置检查安装TiUP组件初始化集群拓扑文件执行部署命令查看集群情况查看已部署的集群情况启动集群验证集群运行状态 启动与停止启动停止 案例讲解测试环境准备环境实施部署 硬件要求 组件CPU内存本地存储网络实例…

大学英语六级考试2022年6月真题|9:00

目录 第一套听力 第一套阅读 选词填空 长篇阅读 仔细阅读 错因 翻译 第一套听力 -7.1 * 1 14/15 -14.2 * 1 9/10 -21.3分 第一套阅读 选词填空 形容词前用副词修饰 remedy vt.修正&#xff1b;纠正 n.解决方法&#xff1b;改进措施 offspring …

TCP三次握手和TCP四次挥手

1. TCP三次握手 三次握手原理&#xff1a; 第1次握手&#xff1a;客户端发送一个带有SYN&#xff08;synchronize&#xff09;标志的数据包给服务端&#xff1b; 第2次握手&#xff1a;服务端接收成功后&#xff0c;回传一个带有SYN/ACK标志的数据包传递确认信息&#xff0c…

Linux 学习记录35(C高级篇)

Linux 学习记录35(C高级篇) 本文目录 Linux 学习记录35(C高级篇)一、linux操作系统1. 文件系统结构2. 常见的linux的发型版本>1. linux发行版和内核版的区别 二、网络配置1. 查看网络是否连接2. 网络配置>1. 保证虚拟机有桥接网络>2. 设置桥接网络>3. 重启网络服务…

MySQL数据库同步方案

一、概述&#xff1a; MYSQL主从同步架构是目前使用最多的数据库架构之一&#xff0c;主从同步使得数据可以从一个数据库服务器复制到其他服务器上&#xff0c;在复制数据时&#xff0c;一个服务器充当主服务器(master)&#xff0c;其余的服务器充当从服务器(slave)。 二、拓扑…

MySQL-SQL视图详细

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a; 小刘主页 ♥️努力不一定有回报&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️学习两年总结出的运维经验&#xff0c;以及思科模拟器全套网络实验教程。专栏&#xf…

Vue实现表情包评论

1.效果图 2.Vue 2.1 下载emo表情 可以自己去gitee上找&#xff0c;或者直接通过百度云。 链接&#xff1a;https://pan.baidu.com/s/1lsUlLhoAsy_ehQyvdhlrpA 提取码&#xff1a;u9ol &#xff08;如果你不想存在本地&#xff0c;也可以把表情包放在云上&#xff09; 2.2 放…

Linux---查看系统资源占用(top)、磁盘信息监控(df、iostat)、网络状态监控(sar)

1. 查看资源占用&#xff08;top指令&#xff09; 可以通过top命令查看CPU、内存使用情况&#xff0c;类似Windows的任务管理器。 默认每5秒刷新一次&#xff0c;语法&#xff1a;直接输入top即可&#xff0c;按q或ctrl c退出。 第一行&#xff1a; top&#xff1a;命令名称…

Arthas实践使用

1.启动 curl -O https://arthas.aliyun.com/arthas-boot.jar java -jar arthas-boot.jar 按下前面对应的数字&#xff0c;即可成功启动 2.用途 实时监控&#xff1a;Arthas 可以实时监控 Java 应用程序的各种指标和状态&#xff0c;例如方法执行时间、线程情况、内存使用情况…

《三》TypeScript 中函数的类型定义

TypeScript 允许指定函数的参数和返回值的类型。 函数声明的类型定义&#xff1a;function 函数名(形参: 形参类型, 形参: 形参类型, ...): 返回值类型 {} function sum(x: number, y: number): number {return x y } sum(1, 2) // 正确 sum(1, 2, 3) // 错误。输入多余的或者…

Studio one6要钱吗?新增了哪些功能

Studio One是Pre sounds公司首次研究开发宿主软件的成果。Studio One在其研发环节就吸取了市面上其他宿主软件的优缺点并且做了专业的调研整改。将其他宿主软件的优点经过改良融合在一起&#xff0c;将不足之处进行舍弃或者优化。 Studio One 6是一款强大的音乐编曲软件,可以帮…

【雕爷学编程】Arduino动手做(113)---5110液晶屏模块

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

6.1面向对象的介绍和内存

学习面向对象内容的三条主线 • Java 类及类的成员&#xff1a;&#xff08;重点&#xff09;属性、方法、构造器&#xff1b;&#xff08;熟悉&#xff09;代码块、内部类 • 面向对象的特征&#xff1a;封装、继承、多态、&#xff08;抽象&#xff09; • 其他关键字的使用…

LC-1494. 并行课程 II(状压DP)

1494. 并行课程 II 难度困难116 给你一个整数 n 表示某所大学里课程的数目&#xff0c;编号为 1 到 n &#xff0c;数组 relations 中&#xff0c; relations[i] [xi, yi] 表示一个先修课的关系&#xff0c;也就是课程 xi 必须在课程 yi 之前上。同时你还有一个整数 k 。 在…

SSR渲染--01--初识Nuxt

SSR服务端渲染 SSR服务端渲染&#xff1a;在后端将html页面处理好&#xff0c;前端直接展示&#xff08;可以解决为后端给你传了一个html脚本&#xff0c;全段渲染&#xff09; 为什么要有SSR服务端渲染&#xff1f; 可以解决单页面首屏加载慢的问题&#xff0c;同时有利于用…

JUC之可见性和有序性

目录 java内存模型 可见性 现象出现 现象解释 解决方法 有序性 诡异的结果 解决方法 Happens-before规则 java内存模型 Java内存模型&#xff08;Java Memory Model&#xff0c;简称JMM&#xff09;定义了Java程序中各种变量、对象的访问方式和内存关系。JMM规定了线…

小程序-uniapp:uni-app-base 项目基础配置及使用,开箱可用

目前&#xff08;20230605&#xff09;uni-app最新版本&#xff08;3.8.4.20230531&#xff09; 一、官网文档 uni-app官网 二、创建项目 项目目标&#xff1a;vue3tsvitevscode 创建以 typescript 开发的工程&#xff08;如命令行创建失败&#xff0c;请直接访问 gitee 下…

consul入门案例及配置热更新的实现及Feign的使用

Consul的简单入门 当Producer启动时,会向Consul发送一个post请求,告诉Consul自己的ip和Port;Consul接收到producer的注册后,每个10S(默认),会向producer发送一个健康检查的请求,检验Producer是否健康当Consumer发送GET方式请求/api/address到Producer时,会先从Consul中拿到一个…