字符函数内存函数———C语言

embedded/2024/9/22 22:28:54/

字符分类函数

头文件:

        ctype.h

函数功能
iscntrl判断字符是否为控制字符
isspace判断字符是否为空白字符(空格,换页、换行、回车、制表符或垂直制表符)
isdigit判断字符是否为十进制数字
isxdigit判断字符是否为十六进制数字(0-9)(a-f)(A-F)
isupper判断字符是否为大写英文字母
islower判断字符是否为小写英文字母
isalpha判断字符是否为英文字母
isalnum判断字符是否为字母或数字
ispunct判断字符是否为标点符号

字符转换函数:

函数功能
tolower把大写字母转换为小写字母
toupper把小写字母转换为大写字母
#include <stdio.h>
#include <ctype.h>
int main() {char ch1, ch2;printf("小写转大写:\n");printf("input a character:");scanf("%c", &ch1);ch2 = toupper(ch1);printf("transform %c to %c.\n", ch1, ch2);printf("大写转小写:\n");char str[1024] = "Hello World!";char* p_str = str;char res[1024] = { 0 };char* p_res = res;while (*p_str) {if (isupper(*p_str)) {*p_res = tolower(*p_str);}else {*p_res = *p_str;}p_str++;p_res++;}    printf("%s transform:%s\n", str, res);return 0;
}

内存函数:

1.memcpy

原型:void * memcpy ( void * destination, const void * source, size_t num );

原理:从source开始位置向后复制num个字节的数据到destination的内存位置

#include <stdio.h>
#include <string.h>
typedef  struct  Stu{char name[1024];int age;}S;
int main() {int nums[] = { 1,2,3,4 };int numsBak[10] = { 0 };memcpy(numsBak, nums, sizeof(nums));int length = sizeof(nums) / sizeof(nums[0]);for (int i = 0; i < length; i++) {printf("%d\n", numsBak[i]);}        // 结构体的拷贝S students[] = { {"xiaoming",10},{"xiaozhao",30} };S studentsBak[3] = { 0 };memcpy(studentsBak, students, sizeof(students));for (int i = 0; i < 3; i++) {S student = studentsBak[i];printf("uname:%s,age:%d\n", student.name, student.age);}return 0;
}

注意:该函数不检测源中的任何终止字符,它总是精确地复制num个字符 

eg:

#include <stdio.h>
#include <string.h>
int main() {char src[] = "He was an unusually\0 complex man";//这里的/0不被在意char dist[1024] = { 0 };    memcpy(dist, src, 200);printf("src:%s\ndist:%s\n", src, dist);printf("dist[21]=%c\n",dist[21]);return 0;
}

2.memmove

原型:void * memmove ( void * destination, const void * source, size_t num );

原理:将num个字节的值从源指向的位置复制到目标指向的内存块。复制就像使用了中间缓存,从而允许目标和源重叠, 该函数不检测源中的任何终止字符,它总是精确地复制num个字符。

section one :

        destination的起始地址在src起始地址之后

section two :

        destination的结束地址在src结束地址之前

#include <stdio.h>
#include <string.h>
int main() {char str[] = "abcdef";// 重叠的区域复制:从 str + 1 开始的部分复制到 str 开头memmove(str, str+1, 5);printf("Result: %s\n", str);  // 输出: "bcdef"return 0;
}

3.memcmp

原型:int memcmp ( const void * ptr1, const void * ptr2, size_t num );

原理:

  • 将ptr1所指向的内存块的前num字节与ptr2所指向的前num字节进行比较,如果它们都匹配则返回0
  • 在两个内存块中不匹配的第一个字节在ptr1中的值小于ptr2中的值,则返回<0的数(比较的是字母转换后的ASCII值)
  • 在两个内存块中不匹配的第一个字节在ptr1中的值大于ptr2中的值,则返回>0的数
#include <stdio.h>
#include <string.h>
int main(){char buffer1[] = "DWGaOtP12df0";char buffer2[] = "DWgAOTP12DF0";int n = memcmp(buffer1, buffer2, sizeof(buffer1));if (n > 0) {printf("'%s' is greater than '%s'.\n", buffer1, buffer2);}    else if (n < 0) {printf("'%s' is less than '%s'.\n", buffer1, buffer2);}    else { printf("'%s' is the same as '%s'.\n", buffer1, buffer2);}return 0;
}

4.memset

原型:void * memset ( void * ptr, int value, size_t num );

原理:将ptr指向的内存块的前num个字节设置为指定的值(解释为unsigned char)

#include <stdio.h>
#include <string.h>
int main() {char name[] = "almost every programmer should know memset!";// 将name指向的内存块的前6个字节设置为-memset(name, '-', 6);printf("%s\n", name);return 0;
}

 

  • 这是本人的学习笔记不是获利的工具,小作者会一直写下去,希望大家能多多监督
  • 文章会每攒够两篇进行更新发布(受平台原因,也是希望能让更多的人看见)
  • 感谢各位的阅读希望我的文章会对诸君有所帮助

http://www.ppmy.cn/embedded/98535.html

相关文章

在线excel/csv转json数据

具体请访问&#xff1a;在线Csv/Excel(xls/xlsx)转Json格式工具

虚幻5|AI行为树,跟随task(非行为树AI)

这个可以不需要行为树 1.打开ai的角色蓝图后&#xff0c;添加一个函数&#xff0c;命名为跟距离改变速度 并用tick调用 2.编辑函数

encoder和decoder结构

1. 编码器&#xff08;Encoder&#xff09;&#xff1a; 编码器处理输入数据&#xff08;例如&#xff0c;句子中的词序列&#xff09;&#xff0c;并将其压缩成一个固定大小的上下文向量或一系列上下文向量。这一部分通常由多层递归神经网络&#xff08;RNNs&#xff09;、长…

Ubuntu技巧-Ubuntu远程访问之电信公网IP

&#x1f4a1; 大家好&#xff0c;我是可夫小子&#xff0c;《小白玩转ChatGPT》专栏作者&#xff0c;关注AIGC、互联网和自媒体。 前面文章介绍了家庭服务器接入外网的三种方式的第一种&#xff0c;今天介绍第二种&#xff0c;即通过获得电脑公网IP&#xff0c;然后再设置动态…

关于Python3项目中依赖包管理问题

背景&#xff1a;最近在使用Python3.11编写脚本来获取google play中app的用户评论&#xff0c;脚本中需要安装多个依赖包&#xff0c;在本地Pycharm调试通过以后&#xff0c;上传到github&#xff0c;然后在linux服务器拉取脚本来运行&#xff0c;发现存在几个问题。本文将面临…

HAProxy的详解

一、介绍 1.1 定义 HAProxy是一个使用C语言编写的自由及开放源代码软件&#xff0c;其提供高可用性、负载均衡&#xff0c;以及基于TCP和HTTP的应用程序代理。 HAProxy特别适用于那些负载特大的web站点&#xff0c;这些站点通常又需要会话保持或七层处理。HAProxy运行在当前…

Vue 3 + Pinia 实现网页刷新功能

概述 在现代 Web 开发中&#xff0c;保持用户界面的动态性和响应性至关重要。当用户触发某些操作时&#xff0c;例如点击按钮或者完成表单提交&#xff0c;我们往往需要刷新页面的一部分来展示最新的数据。本文将介绍如何使用 Vue 3 和 Pinia 来实现这一功能。 技术栈 Vue 3…

程序员如何学习开源项目

程序员如何学习开源项目 豆包MarsCode使用豆包MarsCode学习开源项目步骤导入git上开源的项目 豆包MarsCode https://www.marscode.cn/home 使用豆包MarsCode学习开源项目 步骤 https://www.marscode.cn/dashboard 导入git上开源的项目 找到项目的README.md文件&#xff0c;使…