perror() memcpy() 句柄 文件的读写 一维数组引用 strtok() atof()

来源:互联网 发布:zookeeper nginx 整合 编辑:程序博客网 时间:2024/05/18 01:48
perror( ) 用来将上一个函数发生错误的原因输出到标准设备(stderr)。参数 s 所指的字符串会先打印出,后面再加上错误原因字符串。此错误原因依照全局变量errno 的值来决定要输出的字符串。在库函数中有个errno变量,每个errno值对应着以字符串表示的错误类型。当你调用"某些"函数出错时,该函数已经重新设置了errno的值。perror函数只是将你输入的一些信息和现在的errno所对应的错误一起输出。函数原型 void perror(const char *s); 举例 perror ("open_port");包含头文件   stdio.hmemcpy(memory copy) c和c++使用的内存拷贝函数,memcpy函数的功能是从源src(source)所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy。函数返回dest的值。函数原型 void *memcpy(void *dest, const void *src, size_t n);包含头文件 string.h

句柄,是整个Windows编程的基础。一个句柄是指使用的一个唯一的整数值,即一个4字节(64位程序中为8字节)长的数值,来标识应用程序中的不同对象和同类对象中的不同的实例,诸如,一个窗口,按钮,图标,滚动条,输出设备,控件或者文件等。应用程序能够通过句柄访问相应的对象的信息,但是句柄不是一个指针,程序不能利用句柄来直接阅读文件中的信息。如果句柄不用在I/O文件中,它是毫无用处的。 句柄是Windows用来标志应用程序中建立的或是使用的唯一整数,Windows使用了大量的句柄来标志很多对象。

原理
WINDOWS程序中并不是用物理地址来标识一个内存块,文件,任务或动态装入模块的。相反,WINDOWS API给这些项目分配确定的句柄,并将句柄返回给应用程序,然后通过句柄来进行操作。

在《WINDOWS编程短平快》(南京大学出版社)一书中是这么说的:句柄是WINDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控件,位图,GDI对象等等。WINDOWS句柄有点像C语言中的文件句柄。

从上面的2个定义中我们可以看到,句柄是一个标识符,是拿来标识对象或者项目的。它就像我们的车牌号一样,每一辆注册过的车都会有一个确定的号码,不同的车号码各不相同,但是也可能会在不同的时期出现两辆号码相同的车,只不过它们不会同时处于使用之中罢了。从数据类型上来看它只是一个32位(或64位)的无符号整数。应用程序几乎总是通过调用一个WINDOWS函数来获得一个句柄,之后其他的WINDOWS函数就可以使用该句柄,以引用相应的对象。在WINDOWS编程中会用到大量的句柄,比如:HINSTANCE(实例句柄),HBITMAP(位图句柄),HDC(设备描述表句柄),HICON(图标句柄)等等。这当中还有一个通用的句柄,就是HANDLE。作用.句柄是一个标识符,是拿来标识对象或者项目的。如果想更透彻一点地认识句柄,我可以告诉大家,句柄类似指向指针的指针,仅仅是类似,通过句柄可以找到对应的数据,但是不是二级指针。我们知道,所谓指针是一种内存地址。应用程序启动后,组成这个程序的各对象是驻留在内存中的。简单地理解,似乎我们只要获知这个内存的首地址,就可以随时用这个地址访问对象了。如果您真的这样认为,那您可就大错特错了。我们知道,Windows是一个以虚拟内存为基础的操作系统。在这种系统环境下,Windows内存管理器经常在内存中来回移动对象,以此来满足各种应用程序的内存需要。对象被移动意味着它的地址变化了。如果地址总是如此变化,我们该到哪里去找那一个对象呢?为了解决这个问题,Windows操作系统为全体应用程序腾出一些内存单元,用来专门登记各应用程序的对象在内存中的地址的变化,而前者的物理地址在系统运行期间是始终保持不变的。Windows内存管理器移动了对象在内存中的位置后,会把该对象新的地址及时地告知给对应的句柄进行更新。这样我们只要知道这个句柄,就可以间接地知道对象具体在内存中的哪个位置了。这个地址是在对象装载(Load)时由系统分配给的,当对象卸载时(Unload)又释放给系统。stdin是标准输入,一般指键盘输入到缓冲区里的东西。

文件的读写
fputc函数的一般形式:ch = fputc(ch, fp); fp是文件指针变量。
fgetc函数的一般形式:ch = fgetc(fp);
fputs函数的一般形式:fputs(字符串,文件指针);
fgets函数的一般形式:fgets(字符数组名,n,文件指针);
char *fgets(char *s, int n, FILE *stream);
fgets(key,n,stdin);
fprintf函数的一般形式:ch = fprintf(文件类型指针,格式字符串,输出列表);
fscanf函数的一般形式:scanf(文件类型指针,格式字符串,输入列表); 文件类型指针定义如下: FILE *fp;

通过指针的方式来引用一维数组中的元素
有下列语句:
int *p, a[5];
p = &a;
P+n与a+n表示数组元素a[n]的地址,即&a[n]。对整个a数组来说,共有5个元素,n的取值为0~4,则数组元素的地址就可以表示为p+0 ~ p+4 或 a+0 ~ a+4 。(原因的话,与其在内存中的顺序存储物理结构有关,+0表示首地址,+1表示下一个地址,依次类推)而数组中各元素的表示可用 (p+n) 或者 (a+n)。

strtok 函数分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符串。原型为:char *strtok(char s[], const char *delim);​ (s: string 字符串, delim: delimiter 分隔符)。strtok的函数原型为 char *strtok_r(char *str, const char *delim, char **saveptr);

函数名: atof

功 能: 把字符串转换成浮点数

名字来源:ascii to floating point numbers 的缩写

用 法: double atof(const char *nptr);
包含头文件 stdlib.h

0 0
原创粉丝点击