C语言常用字符串

目录

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全部清为\0int 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.hqwc.cn/news/266193.html

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

相关文章

GitHub 开源开发者日,沙龙见闻与洞察

前言 12月10日&#xff0c;我有幸受邀参加了 GitHub Universe 2023 Watch Party in Shanghai – 开源开发者日。 这次活动在上海微软 Reactor 线下举行&#xff0c;与数位 AI 及开源大咖汇聚现场&#xff0c;与开源爱好者们共同畅聊开源之旅。 活动介绍 整个线下大会中&#…

西工大网络空间安全学院计算机系统基础实验二(清楚实验框架及phase_1)

首先&#xff0c;将自己的实验包从Windows系统中使用scp命令传到Linux虚拟机中。而要想传到Linux虚拟机中&#xff0c;第一步就是要确定Linux虚拟机的IP地址&#xff0c;如 图1&#xff1a;确定Linux虚拟机的IP地址 所示。接着使用scp命令将实验包从Windows系统传送到Linux虚拟…

Java - JVM内存模型及GC(垃圾回收)机制

JVM内存模型 JVM堆内存划分&#xff08;JDK1.8以前&#xff09; JVM堆内存划分&#xff08;JDK1.8之后&#xff09; 主要变化在于&#xff1a; java8没有了永久代&#xff08;虚拟内存&#xff09;&#xff0c;替换为了元空间&#xff08;本地内存&#xff09;。常量池&#…

Python自动化测试系列[v1.0.0][多种数据驱动实现附源码]

前情提要 请确保已经熟练掌握元素定位的常用方法及基本支持&#xff0c;请参考Python自动化测试系列[v1.0.0][元素定位] 数据驱动测试是自动化测试中一种重要的设计模式&#xff0c;这种设计模式可以将测试数据和测试代码分开&#xff0c;实现数据与代码解耦&#xff0c;与此同…

Kotlin(十五) 高阶函数详解

高阶函数的定义 高阶函数和Lambda的关系是密不可分的。在之前的文章中&#xff0c;我们熟悉了Lambda编程的基础知识&#xff0c;并且掌握了一些与集合相关的函数式API的用法&#xff0c;如map、filter函数等。另外&#xff0c;我们也了解了Kotlin的标准函数&#xff0c;如run、…

Footprint Analytics x Future3 万字研报:AI 与 Web3 数据行业融合的现状、竞争格局与未来机遇探析(上)

GPT的横空出世将全球的目光吸引至大语言模型&#xff0c;各行各业都尝试着利用这个“黑科技”提高工作效率&#xff0c;加速行业发展。Future3 Campus携手Footprint Analytics共同深入研究AI与Web3结合的无限可能&#xff0c;联合发布了《AI与Web3数据行业融合现状、竞争格局与…

springboot集成knife4j详细教程

使用原生的swagger作为接口文档&#xff0c;功能不够强大&#xff0c;并且默认的ui比较简陋&#xff0c;不符合大众审美。所以实际开发中推荐使用knife4j对swagger进行增强。knife4j的地址&#xff1a;https://gitee.com/xiaoym/knife4j 基本使用 想要使用knife4j非常简单&…

1. mycat入门

1、mycat介绍 Mycat 是一个开源的分布式数据库系统&#xff0c;但是由于真正的数据库需要存储引擎&#xff0c;而 Mycat 并没有存 储引擎&#xff0c;所以并不是完全意义的分布式数据库系统。MyCat是目前最流行的基于Java语言编写的数据库中间件&#xff0c;也可以理解为是数据…

redis报错

Caused by: io.netty.channel.AbstractChannelSAnnotatedConnectException:

Java LeetCode篇-二叉树经典解法(实现:判断平衡二叉树、找两个节点最近的祖先等)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 平衡二叉树 1.1 实现判断平衡二叉树的思路 1.2 代码实现判断平衡二叉树 2.0 二叉树的层序遍历 2.1 实现二叉树层序遍历的思路 2.2 代码实现二叉树层序遍历 3.0 …

Proteus仿真--射击小游戏仿真设计

本文介绍基于proteus射击小游戏仿真设计&#xff08;完整仿真源文件及代码见文末链接&#xff09; 仿真图如下 K1-K4为4个按键&#xff0c;用于上移、下移、确认等&#xff0c;模拟单机游戏 仿真运行视频 Proteus仿真--射击小游戏仿真设计 附完整Proteus仿真资料代码资料 …