指针(3)计算最长的字符串长度(本题要求实现一个函数,用于计算有n个元素的指针数组s中最长的字符串的长度)以及就题讲解malloc函数

题目要求

本题要求实现一个函数,用于计算有n个元素的指针数组s中最长的字符串的长度。

函数接口定义:

int max_len( char *s[], int n );

其中n个字符串存储在s[]中,函数max_len应返回其中最长字符串的长度。

裁判测试程序样例:

#include <stdio.h>#include <string.h>#include <stdlib.h>#define MAXN 10#define MAXS 20int max_len( char *s[], int n );int main() {int i, n;char *string[MAXN] = {NULL};
scanf("%d", &n);
for(i = 0; i < n; i++) {
string[i] = (char *)malloc(sizeof(char)*MAXS); 
scanf("%s", string[i]); 
} 
printf("%d\n", max_len(string, n)); 
return 0; }
/* 你的代码将被嵌在这里 */

输入样例:

4
blue
yellow
red
green

输出样例:

6

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB


解题代码

int max_len(char* s[], int n) {int i, len;len = strlen(s[0]);for (i = 1; i < n; i++) {if (len < strlen(s[i]))len = strlen(s[i]);return len;}
}

解题步骤

说实在的,这题我感觉难在代码理解。

尤其是这行?这是啥?

string[i] = (char*)malloc(sizeof(char) * MAXS);

(char*)是强制类型转换,将void*(默认malloc函数返回的是void*类型的指针)转换成char*型指针。

为什么要强制类型转换?

void*是一种无类型指针,可以指向任何类型的数据。但是,由于void*是无类型的,因此不能直接进行指针运算或解除引用。为了使用void*指针,需要将其转换为特定类型的指针。

malloc函数是啥?

这行代码是在为指针数组中的每个元素分配内存。

malloc函数用于动态分配内存,sizeof(char) * MAXS表示要分配的内存大小,char*表示分配的内存类型为字符型指针。

因此,string[i] = (char*)malloc(sizeof(char) * MAXS)的作用是为指针数组string中的第i个元素分配一个大小为MAXS的字符型指针数组。

我感觉相当于直接将数组空间进行分配

如果我们想要一个N大小(N<1000)的数组空间,我们多半会开辟一个很大很大的数组空间然后再放进去内容)

int a[10000];
int N = 0; //比较习惯初始化一下
scanf("%d",&N);
for (int i = 0; i < N; i++) {scanf("%d", &a[i]);
}

如果要是这么干,VS2019至少会报错,并跟你干架

int N;
int a[N];

那么这样就会导致空间浪费,如何设立动态空间并进行存储,malloc是一个好的选择。

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

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

相关文章

Redis多路复用在不同操作系统的性能

Redis多路复用 在redis中在不同系统中会使用不同的模型&#xff0c;但是多路复用的原理还是一个进程或者线程可以同时处理多个连接&#xff0c;不需要为每个连接都创建一个单独的线程或者进程。不同的多路复用机制在具体实现有一些差异&#xff0c;但是核心思想还是单个进程或…

C++ 如何使用二维map(二维map使用简单例子)

在C中&#xff0c;可以使用std::map来创建二维map。 首先&#xff0c;你需要包含<map>头文件&#xff1a; #include <map>然后&#xff0c;你可以声明一个map对象&#xff0c;其中一个维度用作键&#xff0c;另一个维度用作值。例如&#xff0c;如果你想创建一个…

华为数通方向HCIP-DataCom H12-831题库(多选题:181-200)

第181题 如图所示,R1、R2、R3、R4都部署为SPF区域0,链路的cost值如图中标识。R1、R2R3、R4的Loopback0通告入OSPF。R1、R2、R3与R4使用Loopback0作为连接接口,建立BGP对等体关系,其中R4为RR设备,R1、R2、R3是R4的客户端。当R4的直连地址172.20,1,4/32通告入BGP后,以下关R…

mysql部署 --(docker)

先查找MySQL 镜像 Docker search mysql &#xff1b; 拉取mysql镜像&#xff0c;默认拉取最新的&#xff1b; 创建mysql容器&#xff0c;-p 代表端口映射&#xff0c;格式为 宿主机端口&#xff1a;容器运行端口 -e 代表添加环境变量&#xff0c;MYSQL_ROOT_PASSWORD是root用户…

2024云渲染平台推荐!免费云渲染平台(注册账号)推荐

近期&#xff0c;由于信息科技和云计算的迅猛发展&#xff0c;云渲染服务也逐步蓬勃发展并已达到成熟阶段&#xff0c;它因其高效办公、成本效益优越以及操作简便易行&#xff0c;赢得了广大设计师和 CG 艺术家的热烈欢迎&#xff0c;在过去的岁月里&#xff0c;创造一张高清晰…

OpenCV技术应用(8)— 如何将视频分解

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。本节课就手把手教大家如何将一幅图像转化成热力图&#xff0c;希望大家学习之后能够有所收获~&#xff01;&#x1f308; 目录 &#x1f680;1.技术介绍 &#x1f680;2.实现代码 &#x1f680;1.技术介绍 视频是…

charles和谷歌浏览器在Mac上进行软件安装,桌面上会显示一个虚拟磁盘,关掉页面推出磁盘内容都消失掉了 需要再次安装问题解决

其他软件也会有这种情况&#xff0c;这里我们以charles为例。绿色背景的内容是重点步骤。 1.如图&#xff0c;我下载了一个charles一个版本的dmg文件。 2.打开后&#xff0c;选择Agree 3.桌面会出现一个磁盘和如下页面 4.错误操作------可以不看 直接看第5步正确操作 常规情…

Socket.D 基于消息的响应式应用层网络协议

首先根据 Socket.D 官网的副标题&#xff0c;Socket.D 的自我定义是&#xff1a; 基于事件和语义消息流的网络应用协议。官网定义的特点是&#xff1a; 基于事件&#xff0c;每个消息都可事件路由所谓语义&#xff0c;通过元信息进行语义描述流关联性&#xff0c;有相关的消息…

【Java JVM】JVM 分析工具

在 $JAVA_HOME/bin 的目录下, 存在着许多小工具, 除了编译和运行 Java 程序外, 打包, 部署, 签名, 调试, 监控, 运维等各种场景都可能会用到它们。 1 常用的命令行工具 1.1 jps (JVM Process Status Tool) - 虚拟机进程状况工具 列出正在运行的虚拟机进程, 并显示虚拟机执行…

Android Studio设置android:background 属性背景颜色

除了默认的颜色之外都要自己添加。 添加颜色的操作步骤&#xff1a; 打开res文件夹&#xff0c;找values&#xff0c;里面有个colors.xml的文件。然后在里面定义一些颜色。 完成

java 10. 注解

java 10. 注解 文章目录 10.1 什么是注解10.2 内置的注解10.2.1 Override 10.3 自定义注解10.4 元注解 10.1 什么是注解 注解&#xff0c;一种元数据形式&#xff0c;提供有关程序的数据&#xff0c;该数据不属于程序本身。注释对其注释的代码的操作没有直接影响。 注解的语…

Spring和Spring Boot的主要区别

Spring 和 Spring Boot 是两种不同的 Java 框架&#xff0c;尽管它们具有许多相似之处&#xff0c;但它们在目的、配置方式、起步依赖、运行方式和适应性等方面仍然存在许多不同。 首先&#xff0c;他们的目的不同&#xff0c;Spring 的主要目的是为 Java 应用程序提供一个基础…

21、Web攻防——JavaWeb项目JWT身份攻击组件安全访问控制

文章目录 一、JavaWeb二、JWT攻击 一、JavaWeb webgoat 1.java web的配置文件&#xff0c;配置文件一般在META-INF目录下&#xff0c;文件名常为pom.xml或web.xml 2.如何通过请求&#xff0c;查看运行的java代码。 地址信息PathTraversal/profile-upload 直接找到以该字符P…

网络安全知识图谱 图数据库介绍及语法

本体构建: 资产&#xff1a; 系统&#xff0c;软件 威胁&#xff1a; 攻击&#xff1a; 建模&#xff1a; 3个本体 5个实体类型 CWE漏洞库 http://cwe.mitre.org/data/downloads.html CPECP攻击模式分类库 http://capec.mitre.org/data/downloads.html CPE通用组件库 http:…

spring使用@Scheduled配置定时任务

schedule的使用 在Spring中&#xff0c;你可以使用Scheduled注解来标记一个方法&#xff0c;使其成为一个定时任务。一般情况下Scheduled注解修饰的任务方法没有返回值也没有入参。 开启schedule Configuration EnableScheduling public class ScheduleConfig {}在配置类上使…

B树和B+树的区别

1.节点结构&#xff1a; a.B树&#xff1a; B树的每个节点包含键和对应的值&#xff0c;子节点的数量和键的数量相等。在B树中&#xff0c;每个节点都存储键和值&#xff0c;并且非叶子节点的键值对应于其子节点的范围。 b.B树&#xff1a; B树的非叶子节点只包含键&#xff0…

Modbus RTU协议与S7 200 PLC通讯

一、Modbus RTU功能码 二、功能码使用与解析实例 01功能码 –读线圈状态 主机发送&#xff1a;01 01 00 01 00 08 6C 0C 从机回复: 01 01 01 2F 10 54 主机解析&#xff1a;01 地址(设备ID)&#xff1b; 01 功能码&#xff1b;00 01 代表查询的起始线圈地址&#xff0c;即…

二叉树题目:输出二叉树

文章目录 题目标题和出处难度题目描述要求示例数据范围 前言解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;输出二叉树 出处&#xff1a;655. 输出二叉树 难度 6 级 题目描述 要求 给定二叉树的根结点 root \textt…

链接未来:深入理解链表数据结构(一.c语言实现无头单向非循环链表)

在上一篇文章中&#xff0c;我们探索了顺序表这一基础的数据结构&#xff0c;它提供了一种有序存储数据的方法&#xff0c;使得数据的访 问和操作变得更加高效。想要进一步了解&#xff0c;大家可以移步于上一篇文章&#xff1a;探索顺序表&#xff1a;数据结构中的秩序之美 今…

06.仿简道云公式函数实战-前瞻

1.前言 在上篇文章中&#xff0c;我们介绍了QLExpress的进阶知识&#xff0c;扩展操作符&#xff0c;自定义操作符和自定义函数等内容。学了上面的内容后&#xff0c;目前对于QLExpress使用已经问题不大&#xff0c;从这篇文章&#xff0c;我们就进入我们的主题仿简道云公式函…