C语言常用字符串

news2024/11/14 15:38:10

目录

1.什么是字符串

2.如何定义字符串 

第3和第4定义的区别:3是字符串变量,4是字符串常量,不予许被修改

3.strlen和sizeof的区别 

 4.地址分配(malloc,realloc,free,memset)

案例 

 5.字符串拷贝(strcpy,strncpy) 

5.1strcpy()

 5.2strncpy()

 6.字符串拼接(strcat)

7.字符串比较 (strcmp)


1.什么是字符串

由双引号(Double Quote)引起来的一串字符称为字符串字面值(String Literal),或者简称字符串,例如 “hello world”

注意:字符串结束的标志是一个 \0
在计算字符串长度的时候\0是结束标志,不算作字符串内容。

2.如何定义字符串 

1.int arr[]={1,2,3,4};  //整型数组

2.char arr1[]={'h','e','l','l','o','\0'};
//定义字符串其实和定义整型数组很像,但是要以\0结尾

3.char arr2[]={"hello world"};    //喜欢用这种和*p="hello world"这种

4.char *p="hello world";

第3和第4定义的区别:3是字符串变量,4是字符串常量,不予许被修改

3.strlen和sizeof的区别 

在计算数据长度一般都用 sizeof 或者 strlen  ,不过这两还是有不小的区别的 
1例
#include <stdio.h>
#include <string.h>
int main(){
	char arr[128]={"hello"};
	printf("sizeof :%d",sizeof(arr)); 这里的 sizeof 就是128了 sizeof 计算的整个数组的长度
	printf("strlen :%d",strlen(arr)); 这里的 strlen 就是5 strlen 计算的是有效的长度了,注意就好
 	试完数组了就试下指针
	char *p="hello";
	printf("sizeof:char *   %d",sizeof(char *));
	printf("sizeof:int *    %d",sizeof(int *));
	printf("sizeof:p        %d",sizeof(p));
	printf("strlen:p        %d",strlen(p));
	1通过代码可以知道,指针在这是占八位字节,且要用strlen才能算出指针中内容的大小
	
}

代码运行结果

 4.地址分配(malloc,realloc,free,memset)

malloc()函数原型  void *malloc(size_t size)

C 库函数 void *malloc(size_t size) 分配所需的内存空间,并返回一个指向它的指针。

malloc在堆开辟空间,而普通变量在开辟空间,函数调用结束后就清理,回收空间,而堆要程序结束后才会释放空间,所以malloc和free一般成对出现,主动释放

realloc()函数原型 void *realloc(void *ptr, size_t size)

C 库函数 void *realloc(void *ptr, size_t size) 尝试重新调整之前调用 malloc 或 calloc 所分配的 ptr 所指向的内存块的大小。 

free()函数原型    void free(void *ptr)

 释放,防止内存泄露,防止悬挂指针

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

memset是一个初始化函数,作用是将某一块内存中的全部设置为指定的值

memset函数在初始化处理时非常方便,但也有其局限性,比如要注意初始化数值,要注意字节数等等

int a[4];
memset(a,1,sizeof(a));

案例 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){
	char *p;
	p=(char *)malloc(1);
	*p='s';
	printf("*p=%c\n",*p);
	free(p);
	//malloc在执行完后前一个malloc会悬挂起来,找不到了
	//malloc在堆开辟空间,而普通变量在栈开辟空间,函数调用结束后就清理,回收空间,而堆要程序结束后才会释放空间
	p=(char *)malloc(12);
	memset(p,'\0',12);//将p全部清为\0
	int len=strlen("chenxinyu666");
	int Newlen=len-12+1;  //将要扩容的大小
	realloc(p,Newlen);    //将p进行扩容
	strcpy(p,"chenxinyu666");
	puts(p);
	puts("done");
	return 0;
}

 5.字符串拷贝(strcpy,strncpy) 

5.1strcpy()

函数原型:char *strcpy(char* dest, const char *src);

 参数1要被赋值的指针,参数2要给别人赋值的指针,并返回被复制后的后的dest

 5.2strncpy()

函数原型:char *strncpy(char *dest, const char *src, int n)

表示把src所指向的字符串中以src地址开始的前n个字节复制到dest所指的数组中,并返回被复制后的dest

 6.字符串拼接(strcat)

 函数strcat()原型:char *strcat(char *dest, const char *src);

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

7.字符串比较 (strcmp)

函数strcmp()原型:int strcmp(const char *s1,const char *s2);

若str1=str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数

函数strncmp()原型:int strncmp ( const char * str1, const char * str2, size_t n )

 功能是把 str1 和 str2 进行比较,最多比较前 n 个字节,若str1与str2的前n个字符相同,则返回0;若s1大于s2,则返回大于0的值;若s1 小于s2,则返回小于0的值。

8 如何快速查找需要的标准库函数呢?

我的习惯是使用man函数手册

格式:man strcpy 

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

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

相关文章

【docker】容器使用(Nginx 示例)

查看 Docker 客户端命令选项 docker上面这三张图都是 常用命令&#xff1a; run 从映像创建并运行新容器exec 在运行的容器中执行命令ps 列出容器build 从Dockerfile构建映像pull 从注册表下载图像push 将图像上载到注册表…

windows启动出现 zookeeper此处不应有java

可能是Java 路径出了问题&#xff0c;这个programFiles直接有空格&#xff0c;没错就有空格&#xff0c;笔者一开始以为这么点算什么空格&#xff0c;需要把这个对应的Java文件到别的英文路径下&#xff0c;并且修改环境变量。就可以启动的。 还可以启动方式有很多种&#xff0…

【操作系统和计网从入门到深入】(二)进程

前言 这个专栏其实是博主在复习操作系统和计算机网络时候的笔记&#xff0c;所以如果是博主比较熟悉的知识点&#xff0c;博主可能就直接跳过了&#xff0c;但是所有重要的知识点&#xff0c;在这个专栏里面都会提到&#xff01;而且我也一定会保证这个专栏知识点的完整性&…

python——第十七天

方法重写(overwrite) 、方法覆盖(override )&#xff1a;在继承的基础上&#xff0c;子类继承了父类的方法&#xff0c;如果不能满足自己使用&#xff0c;我们就可以重写或覆盖该方法 函数重载(overload)&#xff1a; 在强数据类型的编程语言中(如Java、C、C等等): 函数名称…

高通平台开发系列讲解(USB篇)MBIM驱动详解

文章目录 一、数据结构二、源码分析三、adroid_mbim创建四、读写 /dev/adroid_mbim4.1、读gsi_ctrl_dev_read4.2、写gsi_ctrl_dev_write沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本文主要介绍高通平台USB网卡MBIM驱动。 一、数据结构 目录:drivers/usb/gadget/…

Python使用分段函数拟合数据

Python使用分段函数拟合数据 前言前提条件相关介绍实验环境使用分段函数拟合数据代码实现输出结果 前言 由于本人水平有限&#xff0c;难免出现错漏&#xff0c;敬请批评改正。更多精彩内容&#xff0c;可点击进入Python日常小操作专栏、OpenCV-Python小应用专栏、YOLO系列专栏…

【LeetCode】每日一题 2023_12_12 下一个更大元素 IV(堆,优先级队列/单调栈)

文章目录 刷题前唠嗑题目&#xff1a;下一个更大元素 IV题目描述代码与解题思路 刷题前唠嗑 LeetCode&#xff1f;启动&#xff01;&#xff01;&#xff01; 时隔两天&#xff0c;LeetCode 每日一题重新开张&#xff0c;流感已经不能阻挡我的脚步了&#xff01; 题目&#x…

【FAQ】推送前台应用的通知处理功能没生效,如何进行排查?

一、前台应用的通知处理简介 在调用推送接口时可以设置“foreground_show”字段控制前台应用的通知栏消息是否通过NC展示。“foreground_show”默认值为“true”&#xff0c;应用在前台时由NC展示通知栏消息&#xff1b;当设置为“false”时&#xff0c;应用在前台时&#xff…

<习题集><LeetCode><链表><61/83/82/86/92>

目录 61. 旋转链表 83. 删除排序链表中的重复元素 82. 删除排序链表中的重复元素 II 86. 分隔链表 92. 反转链表 II 61. 旋转链表 https://leetcode.cn/problems/rotate-list/ public ListNode rotateRight(ListNode head, int k) {//k等于0&#xff0c;或者head为空&…

高效利用内存资源之动态内存管理详解

目录 一、为什么存在动态内存分配 二、动态内存函数的介绍 2.1malloc 2.2free 2.3calloc 2.4realloc 三、常见的动态内存错误 3.1对NULL指针的解引用操作 3.2对动态开辟空间的越界访问 3.3对非动态开辟内存使用free释放 3.4使用free释放一块动态开辟内存的一部分 3.…

GNSS 精密单点定位(PPP) 所需数据文件及格式说明

目录 1.PPP所需的数据文件 (1)PPP中必要文件&#xff1a; (2)其他非必要文件&#xff1a; (3)文件示例&#xff1a; 2.数据下载方式 (1)网址下载&#xff1a; (2)GAMP II-GOOD软件下载 1.PPP所需的数据文件 (1)PPP中必要文件&#xff1a; 文件 功能 •观测值文件&…

降采样方法对NCC得分的影响因素评估

定位算法原理 关于不同的定位场景,最适合使用的算法原理,Halcon的原理文档中描述如下: 在图案缩放可用忽略,图案纹理丰富的场景,适合采用基于互相关的匹配。 输入参考图像,搜索图像,参考图像在搜索图像上滑动,得到滑动位置的NCC得分。如下图所示,高于阈值的最亮的地…

【多组学数据驱动的机器学习:生物医学研究的创新与突破】

简介&#xff1a;随着生物医学研究的不断发展&#xff0c;多组学数据在疾病预防、诊断和治疗方面发挥着越来越重要的作用。本文将介绍如何利用机器学习技术对多组学数据进行综合分析&#xff0c;以及这种方法在生物医学研究中的优势和潜力。 正文&#xff1a; 一、多组学数据…

linux搭建seata并使用

搭建seata 官网 在linux下搭建 下载1.6.1版本&#xff1a;地址 新建文件夹、上传压缩包并解压 [roothao ~]# cd /usr/local/software/ [roothao /usr/local/software]# ls canal docker elk gitlab jdk mysql nacos nexus nginx rabbitmq redis redis_sentinel…

【Linux】free命令使用

free命令 ​free是指查看当前系统内存的使用情况&#xff0c;它显示系统中剩余及已用的物理内存和交换内存&#xff0c;以及共享内存和被核心使用的缓冲区。 作者 作者&#xff1a;Brian Edmonds。 语法 free [参数] free 命令 -Linux手册页 命令选项及作用 执行令 &am…

ArcGIS无法绘制一个或多个图层

背景&#xff1a;在导入一份数据时候&#xff0c;arcmap出现无法绘制一个或多个图层的错误&#xff0c;...点数少于要素所要求的的数量&#xff0c;查阅了半天资料发现是制作数据时候拓扑关系错误造成&#xff0c;现将处理方法详细记录如下&#xff1a; 1.原数据&#xff1a; …

如何使用GaussDB创建外表(FOREIGN TABLE)

目录 一、前言 二、创建外表的特点 二、GaussDB创建外表访问外部数据库表&#xff08;示例&#xff09; 1、创建外表 2、FAQ&#xff1a;CREATE USER MAPPING错误 三、GaussDB创建外表映射数据文件&#xff08;示例&#xff09; 1、创建数据文件 2、创建外表 3、FAQ&a…

使用torch解决线性回归问题

数据处理 import torch import numpy as np import pandas as pd import matplotlib.pyplot as pltdatapd.read_csv(./datasets/Income1.csv) #数据准备data.head(5)#展示数据 #以上所有的代码都是用jupyter notebook写&#xff0c;形成了阶段性的结果展示 查看数据信息 dat…

Qt的坐标系系统 - 3个坐标系,2个变换

参考&#xff1a; https://zhuanlan.zhihu.com/p/584048811https://www.zhihu.com/tardis/zm/art/634951149?source_id1005 小谈Qt的坐标系系统 Qt中有三个坐标系 设备坐标系窗口坐标系逻辑坐标系 设备坐标系: 即Device坐标系。也是物理坐标系。即真实的的物理坐标系。 …

Ubuntu部署EMQX开源版MQTT服务器-Orange Pi部署-服务器部署

一、前言 作为全球最具扩展性的 MQTT 消息服务器&#xff0c;EMQX 提供了高效可靠海量物联网设备连接&#xff0c;能够高性能实时移动与处理消息和事件流数据&#xff0c;本文将介绍如何在Ubuntu 22.04上部署MQTT服务器。我们本次选择开源版&#xff0c;使用离线安装方式部署。…