本文关键词: c++ 字符串 函数 char *STRcpy(char *s1, const char *s2) 将字符串s2复制到字符串数组s1中,返回s1的值 char *strncpy(char *s1, const char *s2, size_t n) 将字符串s2中最多n个字符复制到字符串数组s1中,返回s1的值
上传时间: 2016-07-09
上传用户:lz4v4
相信长期编程的同志们总会为忘记了fprintf,STRcpy,memcpy等常用函数的格式而烦心吧,为这点破事而装个MSDN实在不划算,因此小弟为大家提供了C语言函数库速查手册,CHM格式
上传时间: 2013-12-17
上传用户:c12228
编写STRcpy函数,虽然简单,但是能检验出点水平的一个练习,在高质量c里有介绍.
上传时间: 2016-08-29
上传用户:奇奇奔奔
C函数速查手册 出版社:人民邮电出版社 《C函数速查手册》中所讲的C语言函数按照功能顺序和字母顺序进行排序,读者既可以按照功能顺序查找,也可以按照字母顺序学习。《C函数速查手册》不仅适合于C语言初学者学习使用,而且也可以作为中、高级C语言开发人员的参考手册。 目录 第1章 数学函数 1.1 _clear87函数:清除浮点状态字 1.2 _status87函数:取浮点状态字 1.3 abs函数:求整数的绝对值 1.4 acos、acosl函数:反余弦函数 1.5 asin、asinl函数:反正弦函数 1.6 atan函数:反正切函数 1.7 atan2、atan2l函数:计算Y/X的反正切值 1.8 cabs函数:计算复数的模 1.9 ceil函数:向上取整 1.10 cos函数:余弦函数 1.11 cosh函数:双曲余弦函数 1.12 div函数:求两个整数相除的商和余数 1.13 exp函数:指数函数 1.14 fabs函数:求浮点数的绝对值 1.15 floor函数:向下取整 1.16 fmod函数:计算x对y的模 1.17 frexp函数:将浮点数分为底数与指数 1.18 hypot函数:计算直角三角形的斜边 1.19 labs函数:取长整数的绝对值 1.20 ldexp、ldexpl函数:幂计算 1.21 ldiv函数:两个长整型数相除 1.22 log、logl函数:计算自然对数 1.23 log10、log10l函数:计算常用对数 1.24 max函数:求两个数中的最大者 1.25 min函数:求两个数中的最小者 1.26 modf、modfl函数:分割数为整数部分和小数部分 1.27 poly函数:计算多项式 1.28 pow函数:指数函数 1.29 pow10函数:指数函数 1.30 rand函数:随机数发生器 1.31 random函数:随机数发生器 1.32 randomize函数:初始化随机数发生器 1.33 sin函数:正弦函数 1.34 sinh函数:双曲正弦函数 1.35 sqrt函数:计算平方根 1.36 srand函数:初始化随机数发生器 1.37 tan、tanl函数:正切函数 1.38 tanh、tanhl函数:双曲正切函数 第2章 字符串函数 2.1 atof函数:把字符串转换成浮点数 2.2 atoi函数:将字符串转换成整型数 2.3 atol函数:将字符串转换成长整型数 2.4 ecvt函数:将浮点数转换为字符串 2.5 fcvt函数:将浮点数转换为字符串 2.6 gcvt函数:将浮点数转换成字符串 2.7 itoa函数:将整数值转换为字符串 2.8 isalnum函数:字母、数字判断函数 2.9 isalpha函数:字母判断函数 2.10 isascii函数:整数值的字符分类 2.11 iscntrl函数:控制字符判断函数 2.12 isdigit函数:数字判断函数 2.13 isgraph函数:打印字符判断 2.14 islower函数:小写字母判断函数 2.15 isprint函数:可打印字符判断函数 2.16 isptmct函数:标点符号判断函数 2.17 isspace函数:空格等判断函数 2.18 isupper函数:大写字母判断函数 2.19 isxdigit函数:十六进制数字判断函数 2.20 ltoa函数:将长整值转换为字符串 2.21 mbstowcs函数:将多字节字符序列转换成相应的宽字符序列 2.22 mbtowc函数:将多字节字符转换成相应的宽字符 2.23 stpcpy函数:复制字符串 2.24 strcat函数:拼接字符串 2.25 strchr函数:查找给定字符 2.26 strcmp函数:比较字符串 2.27 strcmpi函数:比较字符串 2.28 STRcpy函数:复制字符串 2.29 strcspn函数:查找不包含指定字符集子串的段 2.30 strdup函数:将字符串复制到新建的位置 2.31 stricmp函数:比较字符串 2.32 strlen函数:获取字符长度
上传时间: 2014-12-25
上传用户:水口鸿胜电器
有两种方式可以让设备和应用程序之间联系:1. 通过为设备创建的一个符号链;2. 通过输出到一个接口WDM驱动程序建议使用输出到一个接口而不推荐使用创建符号链的方法。这个接口保证PDO的安全,也保证安全地创建一个惟一的、独立于语言的访问设备的方法。一个应用程序使用Win32APIs来调用设备。在某个Win32 APIs和设备对象的分发函数之间存在一个映射关系。获得对设备对象访问的第一步就是打开一个设备对象的句柄。 用符号链打开一个设备的句柄为了打开一个设备,应用程序需要使用CreateFile。如果该设备有一个符号链出口,应用程序可以用下面这个例子的形式打开句柄:hDevice = CreateFile("\\\\.\\OMNIPORT3", GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL ,NULL);文件路径名的前缀“\\.\”告诉系统本调用希望打开一个设备。这个设备必须有一个符号链,以便应用程序能够打开它。有关细节查看有关Kdevice和CreateLink的内容。在上述调用中第一个参数中前缀后的部分就是这个符号链的名字。注意:CreatFile中的第一个参数不是Windows 98/2000中驱动程序(.sys文件)的路径。是到设备对象的符号链。如果使用DriverWizard产生驱动程序,它通常使用类KunitizedName来构成设备的符号链。这意味着符号链名有一个附加的数字,通常是0。例如:如果链接名称的主干是L“TestDevice”那么在CreateFile中的串就该是“\\\\.\\TestDevice0”。如果应用程序需要被覆盖的I/O,第六个参数(Flags)必须或上FILE_FLAG_OVERLAPPED。 使用一个输出接口打开句柄用这种方式打开一个句柄会稍微麻烦一些。DriverWorks库提供两个助手类来使获得对该接口的访问容易一些,这两个类是CDeviceInterface, 和 CdeviceInterfaceClass。CdeviceInterfaceClass类封装了一个设备信息集,该信息集包含了特殊类中的所有设备接口信息。应用程序能有用CdeviceInterfaceClass类的一个实例来获得一个或更多的CdeviceInterface类的实例。CdeviceInterface类是一个单一设备接口的抽象。它的成员函数DevicePath()返回一个路径名的指针,该指针可以在CreateFile中使用来打开设备。下面用一个小例子来显示这些类最基本的使用方法:extern GUID TestGuid;HANDLE OpenByInterface( GUID* pClassGuid, DWORD instance, PDWORD pError){ CDeviceInterfaceClass DevClass(pClassGuid, pError); if (*pError != ERROR_SUCCESS) return INVALID_HANDLE_VALUE; CDeviceInterface DevInterface(&DevClass, instance, pError); if (*pError != ERROR_SUCCESS) return INVALID_HANDLE_VALUE; cout << "The device path is " << DevInterface.DevicePath() << endl; HANDLE hDev; hDev = CreateFile( DevInterface.DevicePath(), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); if (hDev == INVALID_HANDLE_VALUE) *pError = GetLastError(); return hDev;} 在设备中执行I/O操作一旦应用程序获得一个有效的设备句柄,它就能使用Win32 APIs来产生到设备对象的IRPs。下面的表显示了这种对应关系。Win32 API DRIVER_FUNCTION_xxxIRP_MJ_xxx KDevice subclass member function CreateFile CREATE Create ReadFile READ Read WriteFile WRITE Write DeviceIoControl DEVICE_CONTROL DeviceControl CloseHandle CLOSECLEANUP CloseCleanUp 需要解释一下设备类成员的Close和CleanUp:CreateFile使内核为设备创建一个新的文件对象。这使得多个句柄可以映射同一个文件对象。当这个文件对象的最后一个用户级句柄被撤销后,I/O管理器调用CleanUp。当没有任何用户级和核心级的对文件对象的访问的时候,I/O管理器调用Close。如果被打开的设备不支持指定的功能,则调用相应的Win32将引起错误(无效功能)。以前为Windows95编写的VxD的应用程序代码中可能会在打开设备的时候使用FILE_FLAG_DELETE_ON_CLOSE属性。在Windows NT/2000中,建议不要使用这个属性,因为它将导致没有特权的用户企图打开这个设备,这是不可能成功的。I/O管理器将ReadFile和WriteFile的buff参数转换成IRP域的方法依赖于设备对象的属性。当设备设置DO_DIRECT_IO标志,I/O管理器将buff锁住在存储器中,并且创建了一个存储在IRP中的MDL域。一个设备可以通过调用Kirp::Mdl来存取MDL。当设备设置DO_BUFFERED_IO标志,设备对象分别通过KIrp::BufferedReadDest或 KIrp::BufferedWriteSource为读或写操作获得buff地址。当设备不设置DO_BUFFERED_IO标志也不设置DO_DIRECT_IO,内核设置IRP 的UserBuffer域来对应ReadFile或WriteFile中的buff参数。然而,存储区并没有被锁住而且地址只对调用进程有效。驱动程序可以使用KIrp::UserBuffer来存取IRP域。对于DeviceIoControl调用,buffer参数的转换依赖于特殊的I/O控制代码,它不在设备对象的特性中。宏CTL_CODE(在winioctl.h中定义)用来构造控制代码。这个宏的其中一个参数指明缓冲方法是METHOD_BUFFERED, METHOD_IN_DIRECT, METHOD_OUT_DIRECT, 或METHOD_NEITHER。下面的表显示了这些方法和与之对应的能获得输入缓冲与输出缓冲的KIrp中的成员函数:Method Input Buffer Parameter Output Buffer Parameter METHOD_BUFFERED KIrp::IoctlBuffer KIrp::IoctlBuffer METHOD_IN_DIRECT KIrp::IoctlBuffer KIrp::Mdl METHOD_OUT_DIRECT KIrp::IoctlBuffer KIrp::Mdl METHOD_NEITHER KIrp::IoctlType3InputBuffer KIrp::UserBuffer 如果控制代码指明METHOD_BUFFERED,系统分配一个单一的缓冲来作为输入与输出。驱动程序必须在向输出缓冲放数据之前拷贝输入数据。驱动程序通过调用KIrp::IoctlBuffer获得缓冲地址。在完成时,I/O管理器从系统缓冲拷贝数据到提供给Ring 3级调用者使用的缓冲中。驱动程序必须在结束前存储拷贝到IRP的Information成员中的数据个数。如果控制代码不指明METHOD_IN_DIRECT或METHOD_OUT_DIRECT,则DeviceIoControl的参数呈现不同的含义。参数InputBuffer被拷贝到一个系统缓冲,这个缓冲驱动程序可以通过调用KIrp::IoctlBuffer。参数OutputBuffer被映射到KMemory对象,驱动程序对这个对象的访问通过调用KIrp::Mdl来实现。对于METHOD_OUT_DIRECT,调用者必须有对缓冲的写访问权限。注意,对METHOD_NEITHER,内核只提供虚拟地址;它不会做映射来配置缓冲。虚拟地址只对调用进程有效。这里是一个用METHOD_BUFFERED的例子:首先,使用宏CTL_CODE来定义一个IOCTL代码:#define IOCTL_MYDEV_GET_FIRMWARE_REV \CTL_CODE (FILE_DEVICE_UNKNOWN,0,METHOD_BUFFERED,FILE_ANY_ACCESS)现在使用一个DeviceIoControl调用:BOOLEAN b;CHAR FirmwareRev[60];ULONG FirmwareRevSize;b = DeviceIoControl(hDevice, IOCTL_MYDEV_GET_VERSION_STRING, NULL, // no input 注意,这里放的是包含有执行操作命令的字符串指针 0, FirmwareRev, //这里是output串指针,存放从驱动程序中返回的字符串。sizeof(FirmwareRev),& FirmwareRevSize, NULL // not overlapped I/O );如果输出缓冲足够大,设备拷贝串到里面并将拷贝的资结束设置到FirmwareRevSize中。在驱动程序中,代码看起来如下所示:const char* FIRMWARE_REV = "FW 16.33 v5";NTSTATUS MyDevice::DeviceControl( KIrp I ){ ULONG fwLength=0; switch ( I.IoctlCode() ) { case IOCTL_MYDEV_GET_FIRMWARE_REV: fwLength = strlen(FIRMWARE_REV)+1; if (I.IoctlOutputBufferSize() >= fwLength) { STRcpy((PCHAR)I.IoctlBuffer(),FIRMWARE_REV); I.Information() = fwLength; return I.Complete(STATUS_SUCCESS); } else { } case . . . } }
上传时间: 2013-10-17
上传用户:gai928943
/* * 读取INI文件的函数(C语言) * File: readinifile.h * Read INI File * char* GetInitKey(FileName, Section, Key) * Return Key=>Value * + [config] * + dbhost=localhost * * STRcpy(dbhost,GetInitKey("config.ini", "config", "dbhost")) */
标签: File readinifile GetInitKey INI
上传时间: 2015-07-01
上传用户:李彦东
C++面试许多面试题看似简单,却需要深厚的基本功才能给出完美的解答。企业要求面试者写一个最简单的STRcpy函数都可看出面试者在技术上究竟达到了怎样的程度,我们能真正写好一个STRcpy函数吗?我们都觉得自己能,可是我们写出的STRcpy很可能只能拿到10分中的2分。读者可从本文看到STRcpy函数从2分到10分解答的例子,看看自己属于什么样的层次。此外,还有一些面试题考查面试者敏捷的思维能力。
标签: 面试题
上传时间: 2017-03-22
上传用户:gut1234567
有关C语言中字符串的操作的一些经典程序,STRcpy,MEMCPY,数组越界还有一些其他的程序
上传时间: 2017-08-01
上传用户:wsf950131
V1.16 Win32 July 2012 - Ported to Win32 C++ - Allow multiple instances of libnids to coexist in the same process - Incorporate unofficial patch to track established TCP connections - Migration of calls to secure versions (i.e. STRcpy to STRcpy_s) - Compiles under Visual Studio 2010 with no warnings at W4 - Linux support well and truly broken, Linux specific code removed
标签: libnids-Win32
上传时间: 2016-07-30
上传用户:mxgg126
#include <iostream.h> #include <string.h> #include <iomanip.h> #include "Stud.h" Stud::Stud(){} char *Stud::getno() //获取学号 { return no; } char *Stud::getname() //获取姓名 { return name; } char *Stud::getsex() //获取性别 { return sex; } char *Stud::getminzu() //获取民族 { return minzu; } char *Stud::getaddress() //获取出生地 { return address; } char *Stud::getbirth() //获取出生年月 { return birth; } int Stud::gettag() //获取姓名 { return tag; } void Stud::changeno(char n[]) //设置学号 { STRcpy(no,n); } void Stud::changename(char na[]) //设置姓名 { STRcpy(name,na); } void Stud::changesex(char s[]) //设置性别 { STRcpy(sex,s); } void Stud::changeminzu(char m[]) //设置民族 { STRcpy(minzu,m); } void Stud::changeaddress(char a[]) //设置出生地 { STRcpy(address,a); } void Stud::changebirth(char b[]) //设置出生年月 { STRcpy(birth,b); } void Stud::addstudent(char *rn,char *rna) //增加学生 { STRcpy(no,rn); STRcpy(name,rna); } void Stud::addstudent(char *rn,char *rna,char *rs,char *rm,char *ra,char *rb) //增加学生 { tag=0; STRcpy(no,rn); STRcpy(name,rna); STRcpy(sex,rs); STRcpy(minzu,rm); STRcpy(address,ra); STRcpy(birth,rb); } void Stud::delstud() //设置删除标记 { tag=1; } void Stud::disp() //输出学生信息 { cout<<setw(15)<<no<<setw(10)<<name<<setw(10)<<sex<<setw(10)<<minzu<<setw(10)<<address<<setw(10)<<birth<<endl; } void Stud::display() //输出学生信息 { cout<<setw(15)<<no<<setw(10)<<name; }
标签: 学生
上传时间: 2016-12-29
上传用户:767483511