3.2上官c语言学习

第七章 字符串

定义

字符串就是字符数组

如何定义
#include<stdio.h>
int main()
{
	
	char cdata[]={'h','e','l','l','o'}; 
	char cdata2[]="hello";
	char *pchar="hello";
	int i;
	
	printf("%s",pchar);
	
	putchar('\n');
	puts(pchar);
	
	for(i=0;i<5;i++)
	{
	//printf("%c",cdata[i]);
	//printf("%c",cdata2[i]);
	printf("%c",*(pchar+i));

	}
	
	return 0;
}
  1. 和整型一样
  2. 和整型数组一个道理——char str[]={'h','e','l','l','o'}
  3. 改进——char str[]="hello"
  4. 一般用 char *p="hello"

        3和4的区别——3是字符串变量,4是字符串常量(不可以被修改)

 字符串和字符数组的区别

字符串的结束标志是\0

char cdata[6]={'h','e','l','l','o','\0'}应该在字符数组后面加上\0

sizeof和strlen的区别

sizeof是所有的大小,strlen是有效字符的大小

#include<stdio.h>
#include<string.h>
int main()
{
	char cdata[]="hello";//\0
	
	
	printf("sizeof:%d\n",sizeof(cdata));
	printf("strlen:%d\n",strlen(cdata));
	
	
	char *p="hello";
	//p是一个char *,sizeof来计算的时候,得出的是计算机用多少字节来表示一个地址
	printf("sizeof:%d\n",sizeof(p));
	printf("strlen:%d\n",strlen(p));
	
	return 0;
}
动态开辟字符串

malloc函数——函数原型void *malloc(size_t size(内存大小))——c库函void *malloc(size_t size)分配所需的内存空间,并返回一个指向它的指针

realloc函数——函数原型void *relloc(void *ptr(需要扩容的地址),size_t size(新增内存大小)) ——扩容——c库函数void *relloc(void *ptr,size_t size)尝试重新调整之前调用malloc或calloc所分配分配的ptr所指向的内存块的大小

free函数——c库函数void free(void *ptr)释放之前调用malloc,calloc或者realloc所分配的内存空间——防止内存泄漏,防止悬挂指针(野指针的一种)

memset函数——函数原型 void *memset(void*str,int c ,size_t n)

字符串常用API

输出字符串

获取字符串

scanf("%s",cdata)

gets——char *gets(char *str)

复制字符串

strcpy——char* strcpy(char* destination(目标),const char* source);

参数说明

        char* destination---------目标字符串的首地址

        const char* source------源地址:被复制的字符串的首地址,用const修饰,避免修改掉被拷贝的字符串

        返回的是目标字符串的首地址 

使用strcpy的注意事项

  1. 源字符必须以 '\0'结束——char arr2[] = { 'a','b','c','d' };类似于数组的字符串不可以
  2. 要注意备份原来的地址来保存src中的字符串
  3. 目标空间必须足够大,以确保能放源字符串
  4. 目标空间必须可变——char* str1="hello"常量字符串不可以更改

strncpy——char *strncpy(char *dest, const char *src, int n)

参数说明

        dest 目标字符串
        src 源字符串
        n 要拷贝的源字符串的个数

tips

说明:
1、当src字符串长度小于n时,则拷贝完字符串后,剩余部分将用空字节填充,直到n个
     strncpy不会向dest追加’\0’。
2、src和dest所指的内存区域不能重叠,且dest必须有足够的空间放置n个字符

        返回值:dest字符串起始地址

代码展示

#include<stdio.h>
char* mystrcpy(char *des,char *src)
{
	if(des==NULL||src==NULL)
	{
		return NULL;
	}
	
	char *bak=des;//创建备份
	while(*src!='\0')
	{
		*des=*src;
		des++;
		src++;
	}
	*des='\0';
	
	return bak;
	
}

char* mystrcpy2(char *des,char *src)
{
	if(des==NULL||src==NULL)
	{
		return NULL;
	}
	
	char *bak=des;//创建备份
	while(*src!='\0')
	{
		*des++=*src++;
	}
	*des='\0';
	
	return bak;
	
}
char* mystrcpy(char *des,char *src)
{
	if(des==NULL||src==NULL)
	{
		return NULL;
	}
	
	
	char *bak=des;//创建备份
	while((*des++=*src++)='\0');  
	*des='\0';
	
	return bak;
	
}
char* mystrncpy2(char *des,char *src,int count)
{
	if(des==NULL||src==NULL)
	{
		return NULL;
	}
	
	char *bak=des;//创建备份
	while(*src!='\0'&&count>0)
	{
		*des++=*src++;
		count--;
	}
	if (count >0)
	{
		while(count >0)
		{
			count--:
			*des='\0';
		}
		return des;
	}
	*des='\0';
	
	return bak;
	
}


int main()
{
	char str[128]={'\0'};
	char *p="huangwenqi handsome";
	mystrcpy(str,p);
	
	puts(str);
	
	
	return 0;
}

断言

assert

拼接

strcat——char *strcat(char*dest,const char*str)——把src所指向的字符串复制到dest所指向的字符串的后面(删除*dest原来末尾的\0)要保证*dest足够长,以容纳被复制进来的*src。*src中原有的字符不变。返回指向dest的指针

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

详解COB显示屏的技术特点

COB&#xff08;Chip on Board&#xff09;显示屏作为一种采用倒装COB封装技术的LED显示屏&#xff0c;在显示效果以及使用稳定性跟防护性方面&#xff0c;拥有更大优势&#xff0c;今天跟随COB显示屏厂家中品瑞科技一起来看看&#xff0c;COB显示屏的技术特点&#xff1a; 1、…

【前端vue3】TypeScrip-类型推论和类型别名

类型推论 TypeScript里&#xff0c;在有些没有明确指出类型的地方&#xff0c;类型推论会帮助提供类型。 例如&#xff1a; 变量xiaoc被推断类型为string 如重新给xiaoc赋值数字会报错 let xiaoc "xiaoc"xiaoc 1111111111111如没有给变量指定类型和赋值&#xf…

tcpdump命令详解及使用实例

1、抓所有网卡数据包&#xff0c;保存到指定路径 tcpdump -i any -w /oemdata/123.pcap&一、tcpdump简介 tcpdump可以将网络中传送的数据包完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤&#xff0c;并提供and、or、not等逻辑语句来去掉无用的信…

内网服务器时间校正

新购买的云服务器发现内网机器和可以访问外网的机器时间慢了三分钟&#xff0c;导致有些访问会报错&#xff0c;那么我们配置一下ntp校正一下时间。外网配置起来比较简单&#xff0c;直接下载ntp执行校正命令即可。 比当前时间慢了三分钟 注意当前服务器是可以访问外网的机器这…

道可云AI智能体平台全新升级,加快培育发展新质生产力

数字化时代浪潮下&#xff0c;以人工智能为代表的新一代信息技术正在加速推动社会变革&#xff0c;给各行各业带来巨大发展机遇。在AI技术的加持下&#xff0c;“人工智能”成为时代发展趋势&#xff0c;也是加快培育和发展新质生产力的新动能。 为培育数字经济发展新动能&…

自定义vue3 hooks

文章目录 hooks目录结构demo hooks 当页面内有很多的功能&#xff0c;js代码太多&#xff0c;不好维护&#xff0c;可以每个功能都有写一个js或者ts&#xff0c;这样的话&#xff0c;代码易读&#xff0c;并且容易维护&#xff0c;组合式setup写法与此结合&#x1f44d;&#…

Java基础(判断和循环)

一、流程控制语句-顺序结构 顺序结构语句是Java程序默认的执行流程&#xff0c;按照代码的先后顺序&#xff0c;从上到下依次执行。 二、流程控制语句-分支结构&#xff08;分支结构包括if、switch) if语句&#xff1a;在程序中用来进行判断 1、If语句的第一种格式&#xf…

HTTP请求响应/与HTTPS区别

HTTP&#xff08;Hypertext Transfer Protocol&#xff09;和HTTPS&#xff08;Hypertext Transfer Protocol Secure&#xff09;是用于在计算机网络上传输信息的两种协议。 HTTP&#xff08;Hypertext Transfer Protocol&#xff09;: HTTP 是一种用于传输超文本的应用层协议…

谈谈创意设计中的AI、AGI、AIGC

在当今的数字化时代&#xff0c;创意设计领域正经历着前所未有的变革。随着人工智能&#xff08;AI&#xff09;、通用人工智能&#xff08;AGI&#xff09;以及人工智能生成内容&#xff08;AIGC&#xff09;的迅猛发展&#xff0c;设计师们的工作方式和创作手段都发生了深刻的…

网络基础-RIP协议

RIP&#xff08;Routing Information Protocol&#xff09;是一个基于距离矢量的动态路由协议&#xff0c;常用于小型到中型网络。RIP是较早的路由协议之一&#xff0c;具有简单易用的特点。以下是关于RIP协议的详细介绍&#xff1a; RIP的主要特点 ①使用跳数&#xff08;ho…

Flutter循序渐进==>数据结构(列表、映射和集合)和错误处理

导言 填鸭似的教育确实不行&#xff0c;我高中时学过集合&#xff0c;不知道有什么用&#xff0c;毫无兴趣&#xff0c;等到我学了一门编程语言后&#xff0c;才发现集合真的很有用&#xff1b;可以去重&#xff0c;可以看你有我没有的&#xff0c;可以看我有你没有的&#xf…

SAP 替代关系完全替代简介

最近用户在对长周期物料进行备料的时候又提出替代料的问题,主料库存不足的时候需要考虑替代料的在途库存,经常会忘了SAP标准的替代料逻辑,这次一次性把这个逻辑写清楚。 关于替代料的逻辑在前面的博文中测试多个替代料的使用场景 1、后继物料 2、组合替代 本文主要测试一下…

【密码学基础】对随机不经意传输(Random Oblivious Transfer)的理解

ROT在offline阶段生成大量的OT对&#xff0c;在online阶段通过one-pad方式高效加密&#xff0c;并且只需要简单的异或运算就能实现OT过程&#xff08;去随机化&#xff09;。 在ROT中&#xff0c;有一个关键点是&#xff1a;需要考虑offline阶段的选择比特和online阶段的选择比…

(六)Shader

Shader Shader(着色器)&#xff1a;一种运行在GPU端的类C语言GLSL&#xff0c;用于处理顶点数据以及决定像素片元最终着色。 Shader对三角形数据的处理&#xff0c;分为顶点处理和片元处理&#xff0c;分别称为顶点着色器(Vertex Shader)和片元着色器(Fragment Shader) GLSL …

生信新包|Mellon·量化单细胞表型景观中的细胞状态密度

分化是支持所有多细胞生物发育和功能的动态过程。了解细胞如何沿着分化轨迹分布对解析驱动分化的机制、找出关键调控因素以及表征疾病中的失调至关重要。细胞状态密度是这种细胞分布的表现&#xff0c;受到基本生物过程的影响。增殖会增加某一状态下的细胞数目&#xff0c;从而…

centos7搭建zookeeper 集群 1主2从

centos7搭建zookeeper 集群 准备前提规划防火墙开始搭建集群192.168.83.144上传安装包添加环境变量修改zookeeper 的配置 192.168.83.145 和 192.168.83.146 配置 启动 集群 准备 vm 虚拟机centos7系统zookeeper 安装包FinalShell或者其他shell工具 前提 虚拟机安装好3台cen…

CesiumJS【Basic】- #040 绘制渐变线(Primitive方式)

文章目录 绘制渐变线(Primitive方式)1 目标2 代码2.1 main.ts绘制渐变线(Primitive方式) 1 目标 使用Primitive方式绘制渐变线 2 代码 2.1 main.ts import * as Cesium from cesium;const viewer = new Cesium.Viewer

选哪个短剧系统源码好:全面评估与决策指南

在短剧内容创作和分享日益流行的今天&#xff0c;选择合适的短剧系统源码对于构建一个成功的短剧平台至关重要。短剧系统源码不仅关系到平台的稳定性和用户体验&#xff0c;还直接影响到内容创作者和观众的互动质量。本文将提供一份全面的评估指南&#xff0c;帮助您在众多短剧…

软考《信息系统运行管理员》-2.1信息系统运维的管理

2.1信息系统运维的管理 信息系统运维管理体系框架 信息系统运维管理主要流程的目标 标准化&#xff1a;通过流程框架&#xff0c;构件标准的运维流程流程化&#xff1a;将大部分运维工作流程化&#xff0c;确保工作可重复&#xff0c;并且这些工作都有质量的完成&#xff0c;…

centos7离线升级gcc成功案例

需求概述 centos7默认gcc(g)版本为4.8&#xff0c;需要升级至7.3。计算机受安全策略限制不能联网&#xff0c;但可以&#xff08;有限制的&#xff09;拷贝文件。 解决方案 编译源码安装。gcc依赖gmp、mpc、mpfr&#xff0c;但可以通过配置脚本一起编译。 软件包版本&#…