一 : 鸡血藤详细介绍
1.昆明鸡血藤 M. d.var. dielsiana
2.异果崖豆藤M. d.var. heterocarpa
3.雪峰山崖豆藤M. d.var. solida
生活习性木质藤本,除花序和幼嫩部分有黄褐色柔毛外,其余无毛。羽状复叶;小叶7—9,卵状长椭圆形或卵状披针形,长4—12厘米,宽1.5—5.5厘米,两面均无毛,网脉明显。圆锥花序顶生,下垂,序轴有黄色疏柔毛,花多而密集,单生于序轴的节上;萼钟形,裂齿短而钝;花冠紫色或玫瑰红色,无毛。荚果扁,线形,长达15厘米,宽约2厘米,果瓣近木质,种子间缢缩;种子扁圆形。花果期7—10月。
分布:广西道地药,生于灌丛中或山野间;我国华东、华南及湖北、云南均有分布,江苏南部野生;国外越南亦有大量分布。
作用:茎皮纤维可作人造棉、造纸和编织的原料;藤供药用,有行气、扶风、活血的效用;根入药,有舒筋活血的功能,也有杀虫的作用。 藤与根含酚性成分、氨基酸、糖类、树脂。
基原:该品为豆科 Leguminosae 植物密花豆 Spatholobus suberectusDunn 的干燥藤茎。秋、冬二季采收,除去枝叶,切片,晒干。
性状:该品为椭圆形、长矩圆形或不规则的斜切片,厚0.3~1cm。栓皮灰棕色,有的可见灰白色斑,栓皮脱落处现红棕色。切面木部红棕色或棕色,导管孔多数;韧皮部有树脂状分泌物呈红棕色至黑棕色,与木部相间排列呈3~8个偏心性半圆形环;骨部偏向一侧。质坚硬。气微,味涩。
性味归经:苦、甘,温。归肝、肾经。
功能主治:补血,活血,通络。用于月经不调,血虚萎黄,麻木瘫痪,风湿痹痛。
贮藏:置通风干燥处,防霉,防蛀。
会流血的植物—鸡血藤
在云南西双版纳热带雨林中,长着一种会流血的植物-鸡血藤。这你也许很少听说过。在植物界中,正是这些姿态万千、稀奇古怪充满神奇色彩的植物深深地吸引着人们,使人类不断去探索植物界奥秘。鸡血藤(Millettia)属蝶形花科(Papilionaceae)鸡血藤属植物,集观赏及药用为一身。云南产24种,占中国鸡血藤植物总数的一半以上。滇南、滇西南及滇西北热带、亚热带地区资源最为丰富。
鸡血藤为攀援状乔木、灌木或为高大木质藤本。花两性,且两侧对称,位于近轴上方形似蝶首的两片花瓣为旗瓣,两侧平行与蝴蝶翅膀极为相似的两枚花瓣为翼瓣,位于最下方形状有点像盟友蝶尾巴边缘合生的两片花瓣为龙骨瓣。鸡血藤花由紫色、玫瑰红色或白色花冠组成腑生或顶生的总状或圆锥状花序,串串悬挂在空中,恰似小蝴蝶,散发出浓郁的蝶恋花香,在空中争奇斗艳,随风飘荡。
鸡血藤的特别之处在于它的茎里面含有一种别的豆科植物所没有的物质。当它的茎被切断以后,其木质部就立即出现淡红棕色,不久慢慢变成鲜红色汁液流出来,很像鸡血,因此,人们称它为鸡血藤。
鸡血藤植物用途甚广,在庭园中供棚架庇荫,与紫藤有同样效果,但其花色更为艳丽,晚夏开花,冬季半常绿,更受欢迎。除供观赏外,藤和根供药用,有散气、活血、舒筋、活络等功效。
二 : 天语e61好吗?天语e61详细介绍
导语:生活在信息化时代里,我们必然少不了手机,手机在我们的生活中扮演着重要的地位。如果没有手机接收与传递信息,我们就不能及时的知道外部的一些消息。因此,手机在我们生活中的使用十分多,于是人们就面临着购买手机的问题,到底要买什么样的手机呢,要买什么品牌的手机呢?在这里小编建议大家买天语E61这款手机,理由如下:
天语简介:天语E61是一款直板设计的手机,内部的系统连接WindowsMobile6.1操作系统,而且内部设置有播放器,对于一些听歌的朋友来说非常适合,因为这不手机支持MP3和MP4等多媒体格式的播放,同时还支持数字电视的功能,方便我们看电视。机身后面的电池盖是以塑料制作的,而且机身超薄款设计,符合我们现代人的要求,方便我们出门随身携带,当然,使我们使用起来手感好,就单凭这几点就很受许多消费者的喜爱,因此天语e61在我们生活中的口碑也是相当不错的。
天语E61这款手机还有一个值得我们购买的原因,那就是原配的电池是1200毫安的锂电池,充电用时少,容易充满,而且使用的时间较为长,方便我们携带。
基本功能:
1、输入法:内置中文输入法,通过手写的输入方式进行输入,这样可以方便我们对一些汉字的不认识,就可以通过笔画输入。
2、通话记录:和一般的手机一样,通话记录包括:已拨电话、已接电话和未接电话。
3、手机通讯内部功能有:短信、彩信、免提、录音、情景模式、主题、来电铃声、日历、闹钟、秒表、计算器等功能。
4、内置单摄像头,其中摄像头的像素为200万像素。
5、图片最大支持1280×1024像素的照片。
6、支持视频拍摄、视频播放、音频播放的功能。
详细内容:
当你购买天语E61这款手机起(也就是发票上时间为准),如果手机出现问题过故障(注意这些问题与故障不是人刻意的),你就可以凭着发票到维修中心去免费维修,和一般的手机一样,7天包退货。这样一来你就没必要为手机出问题而烦恼啦!
三 : 18B20详细介绍及程序
1.DS18B20基本知识
DS18B20数字温度计是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。[www.61k.com]因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。
1、DS18B20产品的特点
(1)、只要求一个端口即可实现通信。
(2)、在DS18B20中的每个器件上都有独一无二的序列号。
(3)、实际应用中不需要外部任何元器件即可实现测温。
(4)、测量温度范围在-55。C到+125。C之间。
(5)、数字温度计的分辨率用户可以从9位到12位选择。
(6)、内部有温度上、下限告警设置。
2、DS18B20的引脚介绍
TO-92封装的DS18B20的引脚排列见图1,其引脚功能描述见表1。
(
底视图)
图1
表1 DS18B20详细引脚功能描述
3. DS18B20的使用方法
由于DS18B20采用的是1-Wire总线协议方式,即在一根数据线实现数据的双向传输,而对AT89S51单片机来说,硬件上并不支持单总线协议,因此,我们必须采用软件的方法来模拟单总线的协议时序来完成对DS18B20芯片的访问。
18b20 18B20详细介绍及程序
由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。[www.61k.com)DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。
DS18B20的复位时序
DS18B20的读时序
对于DS18B20的读时序分为读0时序和读1时序两个过程。
对于DS18B20的读时隙是从主机把单总线拉低之后,在15秒之内就得释放单总线,以让DS18B20把数据传输到单总线上。DS18B20在完成一个读时序过程,至少需要60us才能完成。
DS18B20的写时序
对于DS18B20的写时序仍然分为写0时序和写1时序两个过程。
对于DS18B20写0时序和写1时序的要求不同,当要写0时序时,单总线要被拉低至少60us,保证DS18B20能够在15us到45us之间能够正确地采样IO总线上的“0”电平,当要写1时序时,单总线被拉低之后,在15us之内就得释放单总线。
18b20 18B20详细介绍及程序
4. 实验任务
用一片DS18B20构成测温系统,测量的温度精度达到0.1度,测量的温度的范围在-20度到+100度之间,用8位数码管显示出来。(www.61k.com)
5. 电路原理图
18b20 18B20详细介绍及程序
6. 系统板上硬件连线
(1). 把“单片机系统”区域中的P0.0-P0.7用8芯排线连接到“动
态数码显示”区域中的ABCDEFGH端子上。[www.61k.com)
(2). 把“单片机系统”区域中的P2.0-P2.7用8芯排线连接到“动
态数码显示”区域中的S1S2S3S4S5S6S7S8端子上。
(3). 把DS18B20芯片插入“四路单总线”区域中的任一个插座中,
注意电源与地信号不要接反。
(4). 把“四路单总线”区域中的对应的DQ端子连接到“单片机系
统”区域中的P3.7/RD端子上。
C语言源程序
18b20 18B20详细介绍及程序
#include <AT89X52.H>
#include <INTRINS.h>
unsigned char code displaybit[]={0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f};
unsigned char code displaycode[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0x00,0x40}; unsigned char code dotcode[32]={0,3,6,9,12,16,19,22,
25,28,31,34,38,41,44,48,
50,53,56,59,63,66,69,72,
75,78,81,84,88,91,94,97};
unsigned char displaycount;
unsigned char displaybuf[8]={16,16,16,16,16,16,16,16};
unsigned char timecount;
unsigned char readdata[8];
sbit DQ=P3^7;
bit sflag;
bit resetpulse(void)
{
unsigned char i;
DQ=0;
for(i=255;i>0;i--);
DQ=1;
for(i=60;i>0;i--);
return(DQ);
for(i=200;i>0;i--);
18b20 18B20详细介绍及程序
}
void writecommandtods18b20(unsigned char command) {
unsigned char i;
unsigned char j;
for(i=0;i<8;i++)
{
if((command & 0x01)==0)
{
DQ=0;
for(j=35;j>0;j--);
DQ=1;
}
else
{
DQ=0;
for(j=2;j>0;j--);
DQ=1;
for(j=33;j>0;j--);
}
command=_cror_(command,1);
}
}
unsigned char readdatafromds18b20(void)
{
unsigned char i;
unsigned char j;
18b20 18B20详细介绍及程序
unsigned char temp; temp=0;
for(i=0;i<8;i++)
{
temp=_cror_(temp,1); DQ=0;
_nop_();
_nop_();
DQ=1;
for(j=10;j>0;j--); if(DQ==1)
{
temp=temp | 0x80; }
else
{
temp=temp | 0x00; }
for(j=200;j>0;j--); }
return(temp);
}
void main(void)
{
TMOD=0x01;
TH0=(65536-4000)/256; TL0=(65536-4000)%256;
18b20 18B20详细介绍及程序
ET0=1;
EA=1;
while(resetpulse());
writecommandtods18b20(0xcc);
writecommandtods18b20(0x44);
TR0=1;
while(1)
{
;
}
}
void t0(void) interrupt 1 using 0
{
unsigned char x;
unsigned int result;
TH0=(65536-4000)/256;
TL0=(65536-4000)%256;
if(displaycount==2)
{
P0=displaycode[displaybuf[displaycount]] | 0x80; }
else
{
P0=displaycode[displaybuf[displaycount]]; }
P2=displaybit[displaycount];
displaycount++;
18b20 18B20详细介绍及程序
if(displaycount==8)
{
displaycount=0;
}
timecount++;
if(timecount==150)
{
timecount=0;
while(resetpulse());
writecommandtods18b20(0xcc); writecommandtods18b20(0xbe);
readdata[0]=readdatafromds18b20(); readdata[1]=readdatafromds18b20(); for(x=0;x<8;x++)
{
displaybuf[x]=16;
}
sflag=0;
if((readdata[1] & 0xf8)!=0x00) {
sflag=1;
readdata[1]=~readdata[1]; readdata[0]=~readdata[0]; result=readdata[0]+1; readdata[0]=result;
if(result>255)
{
18b20 18B20详细介绍及程序
readdata[1]++; }
}
readdata[1]=readdata[1]<<4;
readdata[1]=readdata[1] & 0x70; x=readdata[0];
x=x>>4;
x=x & 0x0f;
readdata[1]=readdata[1] | x; x=2;
result=readdata[1];
while(result/10)
{
displaybuf[x]=result%10; result=result/10;
x++;
}
displaybuf[x]=result;
if(sflag==1)
{
displaybuf[x+1]=17; }
x=readdata[0] & 0x0f;
x=x<<1;
displaybuf[0]=(dotcode[x])%10; displaybuf[1]=(dotcode[x])/10; while(resetpulse());
18b20 18B20详细介绍及程序
writecommandtods18b20(0xcc);
writecommandtods18b20(0x44);
}
}
单片机中使用DS18B20温度传感器C语言程序(参考1)
#include "reg52.h"
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
sbit ds=P2^2;
sbit dula=P2^6;
sbit wela=P2^7;
uchar flag ;
uint temp; //参数temp一定要声明为 int 型
18b20 18B20详细介绍及程序
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //不带小数点数字编码
uchar code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,
0x87,0xff,0xef}; //带小数点数字编码
void TempDelay (uchar us)
{
while(us--);
}
void delay(uint count) //延时子函数
{
uint i;
while(count)
{
18b20 18B20详细介绍及程序
i=200;
while(i>0)
i--;
count--;
}
}
void init_com()
{
TMOD=0x20; //设置定时器1为模式2
TH1=0xfd; //装初值设定波特率
TL1=0xfd;
TR1=1; //启动定时器
SM0=0; //串口通信模式设置
18b20 18B20详细介绍及程序
SM1=1;
// REN=1; //串口允许接收数据
PCON=0; //波特率不倍频
// SMOD=0; //波特率不倍频
// EA=1; //开总中断
//ES=1; //开串行中断
}
void display(uint temp)
{
uchar bai,shi,ge;
bai=temp/100;
shi=temp%100/10;
ge=temp%100%10;
18b20 18B20详细介绍及程序
dula=0;
P0=table[bai]; //显示百位
dula=1; //从0到1,有个上升沿,解除锁存,显示相应段
dula=0; //从1到0再次锁存
wela=0;
P0=0xfe;
wela=1;
wela=0;
delay(1); //延时约2ms
P0=table1[shi]; //显示十位
dula=1;
dula=0;
P0=0xfd;
wela=1;
18b20 18B20详细介绍及程序
wela=0;
delay(1);
P0=table[ge]; //显示个位
dula=1;
dula=0;
P0=0xfb;
wela=1;
wela=0;
delay(1);
}
void ds_reset(void)
{
18b20 18B20详细介绍及程序
ds=1;
_nop_(); //1us
ds=0;
TempDelay(80); //当总线停留在低电平超过480us,总线上所以器件都将被复位,这里//延时约530us总线停留在低电平超过480μs,总线上的所有器件都
//将被复位。(www.61k.com)
_nop_();
ds=1; //产生复位脉冲后,微处理器释放总线,让总线处于空闲状态,原因查//18b20中文资料
TempDelay(5); //释放总线后,以便从机18b20通过拉低总线来指示其是否在线,
//存在检测高电平时间:15~60us, 所以延时44us,进行 1-wire presence //detect(单线存在检测)
_nop_();
_nop_();
_nop_();
18b20 18B20详细介绍及程序
if(ds==0)
flag=1; //detect 18b20 success
else
flag=0; //detect 18b20 fail
TempDelay(20); //存在检测低电平时间:60~240us,所以延时约140us
_nop_();
_nop_();
ds=1; //再次拉高总线,让总线处于空闲状态
}
bit ds_read_bit(void) //读一位
{
bit dat;
18b20 18B20详细介绍及程序
ds=0; //单片机(微处理器)将总线拉低
_nop_(); //读时隙起始于微处理器将总线拉低至少1us
ds=1; //拉低总线后接着释放总线,让从机18b20能够接管总线,输出有效数据
_nop_();
_nop_(); //小延时一下,读取18b20上的数据 ,因为从ds18b20上输出的数据
//在读"时间隙"下降沿出现15us内有效
dat=ds; //主机读从机18b20输出的数据,这些数据在读时隙的下降沿出现//15us内有效
TempDelay(10); //所有读"时间隙"必须60~120us,这里77us
return(dat); //返回有效数据
}
uchar ds_read_byte(void ) //读一字节
{
uchar value,i,j;
18b20 18B20详细介绍及程序
value=0; //一定别忘了给初值
for(i=0;i<8;i++)
{
j=ds_read_bit();
value=(j<<7)|(value>>1); //这一步的说明在一个word文档里面
}
return(value); //返回一个字节的数据
}
void ds_write_byte(uchar dat) //写一个字节
{
uchar i;
bit onebit; //一定不要忘了,onebit是一位
for(i=1;i<=8;i++)
{
18b20 18B20详细介绍及程序
onebit=dat&0x01;
dat=dat>>1;
if(onebit) //写 1
{
ds=0;
_nop_();
_nop_(); //看时序图,至少延时1us,才产生写"时间隙"
ds=1; //写时间隙开始后的15μs内允许数据线拉到高电平
TempDelay(5); //所有写时间隙必须最少持续60us
}
else //写 0
{
ds=0;
TempDelay(8); //主机要生成一个写0 时间隙,必须把数据线拉到低电平并保持至少60μs,这里64us
18b20 18B20详细介绍及程序
ds=1;
_nop_();
_nop_();
}
}
}
void tem_change()
{
ds_reset();
delay(1); //约2ms
ds_write_byte(0xcc);
ds_write_byte(0x44);
18b20 18B20详细介绍及程序
}
uint get_temperature()
{
float wendu;
uchar a,b;
ds_reset();
delay(1); //约2ms
ds_write_byte(0xcc);
ds_write_byte(0xbe);
a=ds_read_byte();
b=ds_read_byte();
temp=b;
temp<<=8;
18b20 18B20详细介绍及程序
temp=temp|a;
wendu=temp*0.0625; //得到真实十进制温度值,因为DS18B20
//可以精确到0.0625度,所以读回数据的最低位代表的是 //0.0625度
temp=wendu*10+0.5; //放大十倍,这样做的目的将小数点后第一位
//也转换为可显示数字,同时进行一个四舍五入操作。[www.61k.com]
return temp;
}
void main()
{
uint a;
init_com();
while(1)
18b20 18B20详细介绍及程序
{
tem_change(); //12位转换时间最大为750ms
for(a=10;a>0;a--)
{
display( get_temperature());
}
}
}
51单片机 8255 18b20 数码管显示温度C程序 (2010-01-22 09:49:22)
转载
标签:
电子资料
电子工程师
软件
it 分类: 软件电子IT
18b20 18B20详细介绍及程序
#include<reg52.h>
#include<absacc.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define PA 0x7cff //PA口
#define PB 0x7dff //PB口
#define con 0x7fff //控制字
sbit A8=P2^0; //地址线A0
sbit A9=P2^1; //地址线A1
sbit cs=P2^7; //片选
sbit wr=P3^6; //读端口
uint temp;
uchar tplsb,tpmsb; // 温度值低位、高位字节 sbit date=P1^2; //数据通信线
uchar code tableshi[]=
{0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f};
//数码管段选 十位
uchar code tablege[]=
{0xbf,0x86,0xdb,0xcf,0xe6,
0xed,0xfd,0x87,0xff,0xef};
//数码管段选 个位 带小数点
//uchar code tablewei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; //数码管位选
18b20 18B20详细介绍及程序
void delay(uchar i)
{
uchar j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void init()
{
uint i;
date=1;
delay(1);
date = 0;
i = 100; //拉低约900us while (i>0) i--;
date= 1; // 产生上升沿 i = 4;
while (i>0) i--;
}
void wait()
{
uint i;
while(date);
while(~date); // 检测到应答脉冲 i = 4;
18b20 18B20详细介绍及程序
while (i>0) i--;
}
bit readbit()
{
uint i;
bit b;
date = 0;
i++;
date = 1;
i++;i++; // 延时15us以上,读时隙下降沿后15us,DS18B20输出数据才有效 b = date;
i = 8;
while(i>0) i--;
return (b);
}
uchar readbyte()
{
uchar i,j,b;
b = 0;
for (i=1;i<=8;i++)
{
j = readbit();
b = (j<<7)|(b>>1);//读出的数据最低位在最前面,这样刚好一个字节在DATE里
}
return(b);
18b20 18B20详细介绍及程序
}
void writebyte(uchar b)//
{
uint i;
uchar j;
bit btmp;
for(j=1;j<=8;j++)
{
btmp = b&0x01;
b = b>>1; // 取下一位(由低位向高位) if (btmp) // 写1
{
date = 0;
i++;i++; // 延时,使得15us以内拉高 date = 1;
i = 8;
while(i>0) i--; // 整个写1时隙不低于60us }
else // 写0
{
date = 0;
i = 8;
while(i>0) i--; // 保持低在60us到120us之间 date = 1;
i++;
i++;
18b20 18B20详细介绍及程序
}
}
}
void convert()
{
init(); // 产生复位脉冲,初始化DS18B20
wait(); // 等待DS18B20给出应答脉冲
delay(1); // 延时
writebyte(0xcc); // 跳过rom 命令
writebyte(0x44); // convert T 命令
}
uint readtemp()
{
float tt;
init(); // 产生复位脉冲,初始化DS18B20
wait(); // 等待DS18B20给出应答脉冲
delay(1); // 延时
writebyte(0xcc); // 跳过rom命令
writebyte(0xbe); // read scratchpad 读暂存器命令
tplsb=readbyte(); // 温度值低位字节(其中低4位为二进制的"小数"部分) tpmsb=readbyte(); // 温度值高位字节(其中高5位为符号位)
temp=tpmsb;
temp<<=8; //合成一个字
temp=temp|tplsb;
tt=temp*0.0625;
18b20 18B20详细介绍及程序
temp=tt*10+0.5;
return temp;
}
void display(uint temp) {
uchar A1,A2,A3;
A1=temp/100;
A2=temp%100/10;
A3=temp%10;
wr=1;
XBYTE[PB]=0xdf; //选通第一位数码管 wr=0;
delay(1);
wr=1;
XBYTE[PA]=tableshi[A1]; //显示百位 wr=0;
delay(10);
wr=1;
XBYTE[PA]=0x00; //关掉显示百位 wr=0;
wr=1;
XBYTE[PB]=0xef; //选通第2位数码管 wr=0;
delay(1);
18b20 18B20详细介绍及程序
wr=1;
XBYTE[PA]=tablege[A2];//显示十位 wr=0;
delay(10);
wr=1;
XBYTE[PA]=0x00; //关掉显示十位 wr=0;
wr=1;
XBYTE[PB]=0xf7; //选通第3位数码管 wr=0;
delay(1);
wr=1;
XBYTE[PA]=tableshi[A3]; //显示个位 wr=0;
delay(10);
wr=1;
XBYTE[PA]=0x00; //关掉显示个位 wr=0;
}
void main()
{
wr=1;
XBYTE[con]=0x80;//A组输入B组输出方式0
18b20 18B20详细介绍及程序
wr=0;
delay(1); // 延时1ms
convert(); // 启动温度转换,需要750ms delay(1000); // 延时1s
while(1)
{
convert();
display(readtemp());
}
}
四 : string.h函数介绍详细2zz
bcmp(比较存内容) | |
相关函数 | bcmp,strcasecmp,strcmp,strcoll,strncmp,strncasecmp |
表头文件 | #include<string.h> |
定义函数 | int bcmp ( const void*s1,const void * s2,int n); |
函数说明 | bcmp()用来比较s1和s2所指的内存区间前n个字节,若参数n为0,则返回0。 |
返回值 | 若参数s1 和s2所指的内存内容都完全相同则返回0 值,否则返回非零值。 |
附加说明 | 建议使用memcmp()取代。 |
范例 | 参考memcmp()。 |
| |
bcopy(拷贝内存内容) | |
相关函数 | memccpy,memcpy,memmove,strcpy,ctrncpy |
表头文件 | #include<string.h> |
定义函数 | void bcopy ( const void*src,void *dest ,int n); |
函数说明 | bcopy()与memcpy()一样都是用来拷贝src所指的内存内容前n个字节到dest所指的地址,不过参数src与dest在传给函数时是相反的位置。 |
返回值 | |
附加说明 | 建议使用memcpy()取代 |
范例 | #include<string.h> main() { char dest[30]=”string(a)”; char src[30]=”string\0string”; int i; bcopy(src,dest,30); printf(bcopy(): “) for(i=0;i<30;i++) printf(“%c”,dest[i]); memcpy(dest src,30); printf(‘\nmemcpy() : “); for(i=0;i<30;i++) printf(“%c”,dest[i]); |
执行 | bcopy() : stringstring memcpy() :string sring |
| |
bzero(将一段内存内容全清为零) | |
相关函数 | memset,swab |
表头文件 | #include<string.h> |
定义函数 | void bzero(void *s,intn); |
函数说明 | bzero()会将参数s所指的内存区域前n个字节,全部设为零值。相当于调用memset((void*)s,0,size_tn); |
返回值 | |
附加说明 | 建议使用memset取代 |
范例 | 参考memset()。 |
| |
index(查找字符串中第一个出现的指定字符) | |
相关函数 | rindex,srechr,strrchr |
表头文件 | #include<string.h> |
定义函数 | char * index( const char*s, int c); |
函数说明 | index()用来找出参数s字符串中第一个出现的参数c地址,然后将该字符出现的地址返回。字符串结束字符(NULL)也视为字符串一部分。 |
返回值 | 如果找到指定的字符则返回该字符所在地址,否则返回0。 |
范例 | #include<string.h> main() { char *s =”0123456789012345678901234567890”; char *p; p =index(s,’5’); printf(%s\n”,p); } |
执行 | 5.68E+25 |
| |
memccpy(拷贝内存内容) | |
相关函数 | bcopy,memcpy,memmove,strcpy,strncpy |
表头文件 | #include<string.h> |
定义函数 | void * memccpy(void*dest, const void * src, int c,size_t n); |
函数说明 | memccpy()用来拷贝src所指的内存内容前n个字节到dest所指的地址上。与memcpy()不同的是,memccpy()会在复制时检查参数c是否出现,若是则返回dest中值为c的下一个字节地址。 |
返回值 | 返回指向dest中值为c的下一个字节指针。返回值为0表示在src所指内存前n个字节中没有值为c的字节。 |
范例 | #include<string.h> main() { char a[]="string[a]"; char b[]="string(b)"; memccpy(a,b,'B',sizeof(b)); printf("memccpy():%s\n",a); } |
执行 | memccpy():string(b) |
| |
memchr(在某一内存范围中查找一特定字符) | |
相关函数 | index,rindex,strchr,strpbrk,strrchr,strsep,strspn,strstr |
表头文件 | #include<string.h> |
定义函数 | void * memchr(const void*s,int c,size_t n); |
函数说明 | memchr()从头开始搜寻s所指的内存内容前n个字节,直到发现第一个值为c的字节,则返回指向该字节的指针。 |
返回值 | 如果找到指定的字节则返回该字节的指针,否则返回0。 |
范例 | #include<string.h> main() { char *s="0123456789012345678901234567890"; char *p; p=memchr(s,'5',10); printf("%s\n",p); } |
执行 | 5.68E+25 |
| |
memcmp(比较内存内容) | |
相关函数 | bcmp,strcasecmp,strcmp,strcoll,strncmp,strncasecmp |
表头文件 | #include<string.h> |
定义函数 | int memcmp (const void*s1,const void *s2,size_t n); |
函数说明 | memcmp()用来比较s1和s2所指的内存区间前n个字符。字符串大小的比较是以ASCII码表上的顺序来决定,次顺序亦为字符的值。memcmp()首先将s1第一个字符值减去s2第一个字符的值,若差为0则再继续比较下个字符,若差值不为0则将差值返回。例如,字符串"Ac"和"ba"比较则会返回字符'A'(65)和'b'(98)的差值(-33)。 |
返回值 | 若参数s1和s2所指的内存内容都完全相同则返回0值。s1若大于s2则返回大于0的值。s1若小于s2则返回小于0的值。 |
范例 | #include<string.h> main() { char *a ="aBcDeF"; char *b="AbCdEf"; char *c="aacdef"; char *d="aBcDeF"; printf("memcmp(a,b):%d\n",memcmp((void*)a,(void*) b,6)); printf("memcmp(a,c):%d\n",memcmp((void*)a,(void*) c,6)); printf("memcmp(a,d):%d\n",memcmp((void*)a,(void*)d,6)); |
执行 | memcmp(a,b):1 memcmp(a,c):-1 memcmp(a,d):0 |
| |
memcpy(拷贝内存内容) | |
相关函数 | bcopy,memccpy,memcpy,memmove,strcpy,strncpy |
表头文件 | #include<string.h> |
定义函数 | void * memcpy (void *dest ,const void *src, size_t n); |
函数说明 | memcpy()用来拷贝src所指的内存内容前n个字节到dest所指的内存地址上。与strcpy()不同的是,memcpy()会完整的复制n个字节,不会因为遇到字符串结束'\0'而结束。 |
返回值 | 返回指向dest的指针。 |
附加说明 | 指针src和dest所指的内存区域不可重叠。 |
范例 | #include<string.h> main() { char a[30]="string (a)"; char b[30]="string\0string"; int i; strcpy(a,b); printf("strcpy():"); for(i=0;i<30;i++) printf("%c",a[i]); memcpy(a,b,30); printf("\nmemcpy() :"); for(i=0;i<30;i++) printf("%c",a[i]); } |
执行 | strcpy() : string a) memcpy() : string string |
| |
memmove(拷贝内存内容) | |
相关函数 | bcopy,memccpy,memcpy,strcpy,strncpy |
表头文件 | #include<string.h> |
定义函数 | void * memmove(void*dest,const void *src,size_t n); |
函数说明 | memmove()与memcpy()一样都是用来拷贝src所指的内存内容前n个字节到dest所指的地址上。不同的是,当src和dest所指的内存区域重叠时,memmove()仍然可以正确的处理,不过执行效率上会比使用memcpy()略慢些。 |
返回值 | 返回指向dest的指针。 |
附加说明 | 指针src和dest所指的内存区域可以重叠。 |
范例 | 参考memcpy()。 |
| |
memset(将一段内存空间填入某值) | |
相关函数 | bzero,swab |
表头文件 | #include<string.h> |
定义函数 | void * memset (void *s,int c, size_t n); |
函数说明 | memset()会将参数s所指的内存区域前n个字节以参数c填入,然后返回指向s的指针。在编写程序时,若需要将某一数组作初始化,memset()会相当方便。 |
返回值 | 返回指向s的指针。 |
附加说明 | 参数c虽声明为int, 但必须是unsignedchar ,所以范围在0到255之间。 |
范例 | #include<string.h> main() { char s[30]; memset (s,'A',sizeof(s)); s[30]='\0'; printf("%s\n",s); } |
执行 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA |
| |
rindex(查找字符串中最后一个出现的指定字符) | |
相关函数 | index,memchr,strchr,strrchr |
表头文件 | #include<string.h> |
定义函数 | char * rindex( const char*s,int c); |
函数说明 | rindex()用来找出参数s字符串中最后一个出现的参数c地址,然后将该字符出现的地址返回。字符串结束字符(NULL)也视为字符串一部分。 |
返回值 | 如果找到指定的字符则返回该字符所在的地址,否则返回0。 |
范例 | #include<string.h> mian() { char *s ="0123456789012345678901234567890"; char *p; p=rindex(s,'5'); printf("%s\n",p); } |
执行 | 567890 |
| |
strcasecmp(忽略大小写比较字符串) | |
相关函数 | bcmp,memcmp,strcmp,strcoll,strncmp |
表头文件 | #include<string.h> |
定义函数 | int strcasecmp (constchar *s1, const char *s2); |
函数说明 | strcasecmp()用来比较参数s1和s2字符串,比较时会自动忽略大小写的差异。 |
返回值 | 若参数s1和s2字符串相同则返回0。s1长度大于s2长度则返回大于0 的值,s1 长度若小于s2长度则返回小于0的值。 |
范例 | #include<string.h> main() { char *a="aBcDeF"; char *b="AbCdEf"; if(!strcasecmp(a,b)) printf("%s=%s\n",a,b); } |
执行 | aBcDeF=AbCdEf |
| |
strcat(连接两字符串) | |
相关函数 | bcopy,memccpy,memcpy,strcpy,strncpy |
表头文件 | #include<string.h> |
定义函数 | char *strcat (char*dest,const char *src); |
函数说明 | strcat()会将参数src字符串拷贝到参数dest所指的字符串尾。第一个参数dest要有足够的空间来容纳要拷贝的字符串。 |
返回值 | 返回参数dest的字符串起始地址 |
范例 | #include<string.h.> main() { char a[30]="string(1)"; char b[]="string(2)"; printf("before strcat() : %s\n",a); printf("after strcat() : %s\n",strcat(a,b)); } |
执行 | before strcat () :string(1) after strcat () : string(1)string(2) |
| |
strchr(查找字符串中第一个出现的指定字符) | |
相关函数 | index,memchr,rinex,strbrk,strsep,strspn,strstr,strtok |
表头文件 | #include<string.h> |
定义函数 | char * strchr (const char*s,int c); |
函数说明 | strchr()用来找出参数s字符串中第一个出现的参数c地址,然后将该字符出现的地址返回。 |
返回值 | 如果找到指定的字符则返回该字符所在地址,否则返回0。 |
范例 | #include<string.h> main() { char *s=0123456789012345678901234567890”; char *p; p=strchr(s,'5'); printf("%s\n",p); } |
执行 | 5.68E+25 |
| |
strcmp(比较字符串) | |
相关函数 | bcmp,memcmp,strcasecmp,strncasecmp,strcoll |
表头文件 | #include<string.h> |
定义函数 | int strcmp(const char*s1,const char *s2); |
函数说明 | strcmp()用来比较参数s1和s2字符串。字符串大小的比 较是以ASCII码表上的顺序来决定,此顺序亦为字符的值。strcmp()首先将s1第一个字符值减去s2第一个字符值,若差值为0则再继续比较下个字符,若差值不为0则将差值返回。例如字符串"Ac"和"ba"比较则会返回字符"A"(65)和'b'(98)的差值(-33)。 |
返回值 | 若参数s1和s2字符串相同则返回0。s1若大于s2则返回大于0的值。s1若小于s2则返回小于0的值。 |
范例 | #include<string.h> main() { char *a="aBcDeF"; char *b="AbCdEf"; char *c="aacdef"; char *d="aBcDeF"; printf("strcmp(a,b) : %d\n",strcmp(a,b)); printf("strcmp(a,c) : %d\n",strcmp(a,c)); printf("strcmp(a,d) : %d\n",strcmp(a,d)); } |
执行 | strcmp(a,b) : 32 strcmp(a,c) :-31 strcmp(a,d) : 0 |
| |
strcoll(采用目前区域的字符排列次序来比较字符串) | |
相关函数 | strcmp,bcmp,memcmp,strcasecmp,strncasecmp |
表头文件 | #include<string.h> |
定义函数 | int strcoll( const char*s1, const char *s2); |
函数说明 | strcoll()会依环境变量LC_COLLATE所指定的文字排列次序来比较s1和s2字符串。 |
返回值 | 若参数s1和s2字符串相同则返回0。s1若大于s2则返回大于0的值。s1若小于s2则返回小于0的值。 |
附加说明 | 若LC_COLLATE为"POSIX"或"C",则strcoll()与strcmp()作用完全相同。 |
范例 | 参考strcmp()。 |
| |
strcpy(拷贝字符串) | |
相关函数 | bcopy,memcpy,memccpy,memmove |
表头文件 | #include<string.h> |
定义函数 | char *strcpy(char*dest,const char *src); |
函数说明 | strcpy()会将参数src字符串拷贝至参数dest所指的地址。 |
返回值 | 返回参数dest的字符串起始地址。 |
附加说明 | 如果参数dest所指的内存空间不够大,可能会造成缓冲溢出(bufferOverflow)的错误情况,在编写程序时请特别留意,或者用strncpy()来取代。 |
范例 | #include<string.h> main() { char a[30]="string(1)"; char b[]="string(2)"; printf("before strcpy() :%s\n",a); printf("after strcpy() :%s\n",strcpy(a,b)); } |
执行 | before strcpy():string(1) after strcpy() :string(2) |
| |
strcspn(返回字符串中连续不含指定字符串内容的字符数) | |
相关函数 | strspn |
表头文件 | #inclued<string.h> |
定义函数 | size_t strcspn ( constchar *s,const char * reject); |
函数说明 | strcspn()从参数s字符串的开头计算连续的字符,而这些字符都完全不在参数reject所指的字符串中。简单地说,若strcspn()返回的数值为n,则代表字符串s开头连续有n个字符都不含字符串reject内的字符。 |
返回值 | 返回字符串s开头连续不含字符串reject内的字符数目。 |
范例 | #include<string.h> main() { char *str="Linux was first developed for 386/486-based pcs."; printf("%d\n",strcspn(str," ")); printf("%d\n",strcspn(str,"/-")); printf("%d\n",strcspn(str,"1234567890")); } |
执行 | 5 33 30 |
| |
strdup(复制字符串) | |
相关函数 | calloc,malloc,realloc,free |
表头文件 | #include<string.h> |
定义函数 | char * strdup( const char*s); |
函数说明 | strdup()会先用maolloc()配置与参数s字符串相同的空间大小,然后将参数s字符串的内容复制到该内存地址,然后把该地址返回。该地址最后可以利用free()来释放。 |
返回值 | 返回一字符串指针,该指针指向复制后的新字符串地址。若返回NULL表示内存不足。 |
范例 | #include<string.h> main() { char a[]="strdup"; char *b; b=strdup(a); printf("b[ ]="%s"\n",b); } |
执行 | b[]="strdup" |
| |
strlen(返回字符串长度) | |
相关函数 | |
表头文件 | #include<string.h> |
定义函数 | size_t strlen (const char*s); |
函数说明 | strlen()用来计算指定的字符串s的长度,不包括结束字符"\0"。 |
返回值 | 返回字符串s的字符数。 |
范例 | #include<string.h> main() { char *str = "12345678"; printf("str length = %d\n", strlen(str)); } |
执行 | str length =8 |
| |
strncasecmp(忽略大小写比较字符串) | |
相关函数 | bcmp,memcmp,strcmp,strcoll,strncmp |
表头文件 | #include<string.h> |
定义函数 | int strncasecmp(constchar *s1,const char *s2,size_t n); |
函数说明 | strncasecmp()用来比较参数s1和s2字符串前n个字符,比较时会自动忽略大小写的差异。 |
返回值 | 若参数s1和s2 字符串相同则返回0。s1若大于s2则返回大于0的值,s1若小于s2则返回小于0 的值。 |
范例 | #include<string.h> main() { char *a="aBcDeF"; char *b="AbCdEf"; if(!strncasecmp(a,b)) printf("%s =%s\n",a,b); } |
执行 | aBcDef=AbCdEf |
| |
strncat(连接两字符串) | |
相关函数 | bcopy,memccpy,memecpy,strcpy,strncpy |
表头文件 | #inclue<string.h> |
定义函数 | char * strncat(char*dest,const char *src,size_t n); |
函数说明 | strncat()会将参数src字符串拷贝n个字符到参数dest所指的字符串尾。第一个参数dest要有足够的空间来容纳要拷贝的字符串。 |
返回值 | 返回参数dest的字符串起始地址。 |
范例 | #include<string.h> main() { char a[30]="string(1)"; char b[]="string(2)"; printf("before strnact() :%s\n", a); printf("after strncat() :%s\n", strncat(a,b,6)); } |
执行 | before strnact() :string(1) after strncat() : string(1) string |
| |
strncpy(拷贝字符串) | |
相关函数 | bcopy,memccpy,memcpy,memmove |
表头文件 | #include<string.h> |
定义函数 | char * strncpy(char*dest,const char *src,size_t n); |
函数说明 | strncpy()会将参数src字符串拷贝前n个字符至参数dest所指的地址。 |
返回值 | 返回参数dest的字符串起始地址。 |
范例 | #inclue<string.h> main([www.61k.com]) { char a[30]="string(1)"; char b[]="string(2)"; printf("before strncpy() : %s\n",a); printf("after strncpy() : %s\n",strncpy(a,b,6)); } |
执行 | before strncpy() :string(1) after strncpy() : string(1) |
| |
strpbrk(查找字符串中第一个出现的指定字符) | |
相关函数 | index,memchr,rindex,strpbrk,strsep,strspn,strstr,strtok |
表头文件 | #include<include.h> |
定义函数 | char *strpbrk(const char*s,const char *accept); |
函数说明 | strpbrk()用来找出参数s字符串中最先出现存在参数accept 字符串中的任意字符。 |
返回值 | 如果找到指定的字符则返回该字符所在地址,否则返回0。 |
范例 | #include<string.h> main() { char *s="0123456789012345678901234567890"; char *p; p=strpbrk(s,"a1 839"); printf("%s\n",p); p=strprk(s,"4398"); printf("%s\n",p); |
执行 | 1.23E+29 |
| |
strrchr(查找字符串中最后出现的指定字符) | |
相关函数 | index,memchr,rindex,strpbrk,strsep,strspn,strstr,strtok |
表头文件 | #include<string.h> |
定义函数 | char * strrchr(const char*s, int c); |
函数说明 | strrchr()用来找出参数s字符串中最后一个出现的参数c地址,然后将该字符出现的地址返回。 |
返回值 | 如果找到指定的字符则返回该字符所在地址,否则返回0。 |
范例 | #include<string.h> main() { char *s="0123456789012345678901234567890"; char *p; p=strrchr(s,'5'); printf("%s\n",p); } |
执行 | 567890 |
| |
strspn(返回字符串中连续不含指定字符串内容的字符数) | |
相关函数 | strcspn,strchr,strpbrk,strsep,strstr |
表头文件 | #include<string.h> |
定义函数 | size_t strspn (const char*s,const char * accept); |
函数说明 | strspn()从参数s字符串的开头计算连续的字符,而这些字符都完全是accept所指字符串中的字符。简单的说,若strspn()返回的数值为n,则代表字符串s 开头连续有n个字符都是属于字符串accept内的字符。 |
返回值 | 返回字符串s开头连续包含字符串accept内的字符数目。 |
范例 | #include<string.h> main() { char *str="Linux was first developed for 386/486-based PCs."; char*t1="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; printf("%d\n",strspn(str,t1)); } |
执行 | 5 |
| |
strstr(在一字符串中查找指定的字符串) | |
相关函数 | index,memchr,rindex,strchr,strpbrk,strsep,strspn,strtok |
表头文件 | #include<string.h> |
定义函数 | char *strstr(const char*haystack,const char *needle); |
函数说明 | strstr()会从字符串haystack中搜寻字符串needle,并将第一次出现的地址返回。 |
返回值 | 返回指定字符串第一次出现的地址,否则返回0。 |
范例 | #include<string.h> main() { char * s="012345678901234567890123456789"; char *p; p= strstr(s,"901"); printf("%s\n",p); } |
执行 | 9.01E+21 |
| |
strtok(分割字符串) | |
相关函数 | index,memchr,rindex,strpbrk,strsep,strspn,strstr |
表头文件 | #include<string.h> |
定义函数 | char * strtok(char*s,const char *delim); |
函数说明 | strtok()用来将字符串分割成一个个片段。参数s指向欲分割的字符串,参数delim则为分割字符串,当strtok()在参数s的字符串中发现到参数delim的分割字符时则会将该字符改为\0字符。在第一次调用时,strtok()必需给予参数s字符串,往后的调用则将参数s设置成NULL。每次调用成功则返回下一个分割后的字符串指针。 |
返回值 | 返回下一个分割后的字符串指针,如果已无从分割则返回NULL。 |
范例 | #include<string.h> main() { char s[]="ab-cd : ef;gh :i-jkl;mnop;qrs-tu: vwx-y;z"; char *delim="-: "; char *p; printf("%s ";strtok(s,delim)); while((p=strtok(NULL,delim)))printf("%s ",p); printf("\n"); } |
执行 | ab cd ef;gh ijkl;mnop;qrs tu vwx y;z |
61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1