char函数

c语言字符串处理函数

白昼怎懂夜的黑 提交于 2019-12-15 01:16:54
1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, p1) 附加字符串 strncat(p, p1, n) 附加指定长度字符串 strlen§ 取字符串长度 strcmp(p, p1) 比较字符串 strcasecmp忽略大小写比较字符串 strncmp(p, p1, n) 比较指定长度字符串 strchr(p, c) 在字符串中查找指定字符 strrchr(p, c) 在字符串中反向查找 strstr(p, p1) 查找字符串 strpbrk(p, p1) 以目标字符串的所有字符作为集合,在当前字符串查找该集合的任一元素 strspn(p, p1) 以目标字符串的所有字符作为集合,在当前字符串查找不属于该集合的任一元素的偏移 strcspn(p, p1) 以目标字符串的所有字符作为集合,在当前字符串查找属于该集合的任一元素的偏移 具有指定长度的字符串处理函数在已处理的字符串之后填补零结尾符 2)字符串到数值类型的转换 strtod(p, ppend) 从字符串 p 中转换 double 类型数值,并将后续的字符串指针存储到 ppend 指向的 char* 类型存储。 strtol(p, ppend, base) 从字符串 p 中转换 long 类型整型数值,base 显式设置转换的整型进制,设置为 0

C语言库函数篇1:sscanf用法

强颜欢笑 提交于 2019-12-14 23:44:40
一、前言 本节,我们将学习C语言库函数sscanf()的使用,使用sscanf可以快速的从复杂字符串中获取自己需要的数据。 二、基础知识 1.简介 sscanf与scanf类似,都是用于输入的,只是后者以键盘(stdin)为输入源,前者以固定字符串为输入源。 2.函数描述 int sscanf(const char buffer, const char format, [argument]...); 参数: buffer:需要解析的源字符串 format:窗体控件字符串,定义解析字符串的规则,可以是一个或多个 {%[*] [width] [{h | I | I64 | L}]type | ' ' | '\t' | '\n' | 非%符号} argument:可选变量,用来存储按照format规则解析buffer的结果 注: (1) 亦可用于格式中, (即 % d 和 % s) 加了星号 ( ) 表示跳过此数据。 (也就是不把此数据读入参数中) (2) {a|b|c}表示a,b,c中选一,[d],表示可以有d也可以没有d。 (3) width表示读取宽度。 (4) {h | l | I64 | L}:参数的size,通常h表示单字节size,I表示2字节 size,L表示 4字节size(double例外),l64表示8字节size。 (5) type :这就很多了,就是%s,

c memmove和memcpy的实现和区别

微笑、不失礼 提交于 2019-12-14 23:38:55
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> memcpy和memmove()都是C语言中的库函数,在头文件string.h中,作用是拷贝一定长度的内存的内容,原型分别如下: void *memcpy(void *dst, const void *src, size_t count); void *memmove(void *dst, const void *src, size_t count); 他们的作用是一样的,唯一的区别是,当内存发生局部重叠的时候,memmove保证拷贝的结果是正确的,memcpy不保证拷贝的结果的正确。 第一种情况下,拷贝重叠的区域不会出现问题,内容均可以正确的被拷贝。 第二种情况下,问题出现在右边的两个字节,这两个字节的原来的内容首先就被覆盖了,而且没有保存。所以接下来拷贝的时候,拷贝的是已经被覆盖的内容,显然这是有问题的。 实际上,memcpy只是memmove的一个子集。 二者的c语言实现很简单,有兴趣的朋友可以去看看。在实际情况下,这两个函数都是用汇编实现的。 memmove在copy两个有重叠区域的内存时可以保证copy的正确,而memcopy就不行了,但memcopy比memmove的速度要快一些,如: char s[] = "1234567890"; char* p1 = s; char* p2 = s+2;

C语言编写字符串连接函数

落花浮王杯 提交于 2019-12-14 19:02:31
初学C,便写了一段字符串连接函数发表玩玩,希望看到地人儿可以有所帮助呦! # include <stdio.h> int main ( ) { void MyStrcat ( char * dstStr , char * srcStr ) ; char str1 [ 80 ] , str2 [ 40 ] , * p , * q ; printf ( "Input a string:" ) ; gets ( str1 ) ; printf ( "Input another string:" ) ; gets ( str2 ) ; p = str1 ; q = str2 ; MyStrcat ( p , q ) ; printf ( "Concatenate results:%s\n" , str1 ) ; return 0 ; } void MyStrcat ( char * dstStr , char * srcStr ) { while ( * dstStr ) { dstStr ++ ; } while ( ( * dstStr = * srcStr ) != '\0' ) { dstStr ++ ; srcStr ++ ; } } 来源: CSDN 作者: 啊啊啊ZY 链接: https://blog.csdn.net/weixin_45763617/article

短信控制的 智能插头(sim900a arduino uno)

。_饼干妹妹 提交于 2019-12-14 17:11:43
https://www.arduino.cn/thread-19432-1-2.html 1.所需工具: (1)arduino UNO,(2)sim900a模块,(3)单路继电器,(4)220v ac转12v dc的降压模块【给arduino供电,12V是官方说明的供电极限】(我用的是高能立方),(5)插头,插孔,电线。 2.连线: 我是小白,不会设计电路,没法画图了,就直接说我自己的连线了。 火线接降压模块的L,零线接N,地线接E(插头遵守 左零右火上接地 原则);降压模块的正极接VIN,负极接GND;arduino 7脚接sim900a的5VR,8脚接sim900a的5VT;arduino的5V接sim900a的VCC,arduino的GND接sim900a的GND;arduino的11脚接继电器GND,12脚接继电器VCC,13脚接继电器的控制端;插孔的地线、零线接插头的地线、零线,插孔的火线一段接插头、一端接插孔、中间连入继电器。 3.注意事项: (1)事先检查线有没有断(我就因为RX的线断了,折腾了好几天) (2)保证sim卡安装好,sim卡的内容提前保存好程序会删除所有短信 (3)为了接收短信的全部内容可以增加串口缓冲区的大小,方法:找到Arduino\hardware\arduino\avr\libraries\SoftwareSerial

greenplum6.1 使用复制表

て烟熏妆下的殇ゞ 提交于 2019-12-14 15:57:02
创建heap堆表:主键,分布键(只能行存储) CREATE TABLE glfmkhjl ( id char(7) NOT NULL, name char(8) , birthday date, org_no char(6) , create_time timestamp, update_time timestamp, PRIMARY KEY (id) ) distributed by (id); insert into glfmkhjl values('0010603','陈一,'1971-04-17','981000',current_timestamp,current_timestamp),('0010021','陈二','1976-01-17','981000',current_timestamp,current_timestamp),('0010026','王三','1978-02-17','981000',current_timestamp,current_timestamp); ------------------------------------------------------------- 设置为复制表:主键,无分布键 CREATE TABLE glfmwdkz ( org_no char(6) NOT NULL, org_name varchar(80),

《SQL必知必会》学习笔记(sqlite)

夙愿已清 提交于 2019-12-14 05:12:24
第0课 准备数据 下载了书中提供的sqlite数据库内容。 sqlite学习 runoob提供的sqlite教程 打开书中的例子的方法 sqlite3 tysql.sqlite 常用命令 .help .show 配置输出样式 .schema 显示create语句 格式化输出 您可以使用下列的点命令来格式化输出 sqlite>.header on sqlite>.mode column sqlite>.timer on sqlite> 更多mode样式参考 文章 sqlite_master 表格 主表中保存数据库表的关键信息,并把它命名为 sqlite_master 。 查看sqlite_master的create语句。 sqlite> .schema sqlite_master CREATE TABLE sqlite_master ( type text, name text, tbl_name text, rootpage integer, sql text ); 查看sqlite_master中所有的table(书中例子) sqlite> select * from sqlite_master where type="table"; type name tbl_name rootpage sql ---------- ---------- ---------- --------

将一个字符大小写转换

為{幸葍}努か 提交于 2019-12-14 01:49:23
你可以假设输入一定在小写字母 a ~ z 之间 public class Solution { public static char lowercaseToUppercase ( char character ) { character = ( char ) ( character - 32 ) ; return character ; } public static char uppercaseTolowercase ( char character ) { character = ( char ) ( character + 32 ) ; return character ; } public static void main ( String [ ] args ) { Scanner sc = new Scanner ( System . in ) ; String str = sc . next ( ) ; char character = str . charAt ( 0 ) ; //Solution so = new Solution(); if ( character >= 'a' && character <= 'z' ) { System . out . print ( lowercaseToUppercase ( character ) ) ; } if (

I2C接口开漏输出输入双向

十年热恋 提交于 2019-12-13 22:03:17
I2C接口 原创 朝辞暮见 发布于2018-06-13 19:45:25 阅读数 8265 收藏 展开 一、I2C总线协议内容 1. I2C总线引脚定义 SDA (I2C数据引脚) CLK (I2C数据引脚) 2. I2C 总线物理连接 I2C总线物理连接如下图所示,SDA和CLK连接线上连有两个上拉电阻,当总线空闲时,两根线均为高电平。连到总线上的任一器件输出的低电平,都将使总线的信号变低。 二、I2C总线的数据传送 1. 数据位的有效性规定 I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化 1 scl处于高电平的时候,如果sda处于低电平:传输数据0,sda处于高电平:传输数据1 2.在scl处于高电平的时候,sda用来传输数据,必须保持电平稳定 3.如果要产生数据即sda需要变化时,只能在scl处于低电平的时候 2. 起始和终止信号 SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号;SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号。 1. 信号的发起和终止,由主机发起,在起始信号产生后,总线就处于被占用的状态;在终止信号产生后,总线就处于空闲状态。 2. scl处于高电平的时候,sda由高->低的跳变, 表示发起传输,产生起始信号s, 如果低-

数组指针和指针数组

走远了吗. 提交于 2019-12-13 16:17:01
数组指针(也称行指针) 定义 int (*p)[n]; ()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。 如要将二维数组赋给一指针,应这样赋值: int a[3][4]; int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。 p=a; //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0] p++; //该语句执行过后,也就是p=p+1;p跨过行a[0][]指向了行a[1][] 所以数组指针也称指向一维数组的指针,亦称行指针。 指针数组 定义 int *p[n]; []优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组,它有n个指针类型的数组元素。这里执行p+1时,则p指向下一个数组元素,这样赋值是错误的:p=a;因为p是个不可知的表示,只存在p[0]、p[1]、p[2]...p[n-1],而且它们分别是指针变量可以用来存放变量地址。但可以这样 *p=a; 这里*p表示指针数组第一个元素的值,a的首地址的值。 如要将二维数组赋给一指针数组: int *p[3]; int a[3][4]; p++; //该语句表示p数组指向下一个数组元素。注:此数组每一个元素都是一个指针 for(i=0;i<3;i++) p[i]=a