函数

来源:互联网 发布:org.apache.axis 编辑:程序博客网 时间:2024/06/05 11:35

access()

int _access(char* path,int mode)
功能描述: 检查调用进程是否可以对指定的文件执行某种操作
参数path 是访问文件所在的路径名,mode是访问判断模式,如:R_OK文件是否可读 ,W_OK文件是否可写入 , F_OK 文件是否存在。
例如: _access(“test.txt”,F_OK);
返回0 表示文件在当前路径已存在,返回-1表示该文件在当前路径不存在。

fopen()

fopen函数用于打开文件, 其调用格式为:
FILE *fopen(char *filename, *type);
fclose()函数:用来关闭一个由fopen()函数打开的文件 , 其调用格式为:
int fclose(FILE *stream);
该函数返回一个整型数。当文件关闭成功时, 返回0, 否则返回一个非零值。可以根据函数的返回值判断文件是否关闭成功。
在介绍fopen()这个函数之;前, 先了解一下下面的知识。
(1) 流(stream)和文件(file)
流和文件 在Turbo C2.0中是有区别的, Turbo C2.0 为编程者和被访问的设备之间提供了一层抽象的东西, 称之为”流”, 而将具体的实际设备叫做文件。流是一个逻辑设备, 具有相同的行为。因此, 用来进行磁盘文件写的函数也同样可以用来进行打印机的写入。在Turbo C2.0中有两种性质的流: 文字流( text stream)和二进制(binary stream)。对磁盘来说就是文本文件和二进制文件。本软件为了便于让读者易理解Turbo C2.0语言而没有对流和文件作特别区分。
(2) 文件指针FILE
实际上FILE是一个新的数据类型。它是Turbo C2.0的基本数据类型的集合, 称之为结构指针。有关结构的概念将在第四节中详细介绍, 这里只要将FILE理解为一个包括了文件管理有关信息的数据结构, 即在打开文件时必须先定义一个文件指针。
(3) 以后介绍的函数调用格式将直接写出形式参数的数据类型和函数返回值的数据类型。例如: 上面打开文件的函数, 返回一个文件指针, 其中形式参数有两个, 均为字符型变量(字符串数组或字符串指针)。本软件不再对函数的调用格式作详细说明。

10:     #iclude<stdio.h>     main()     {          FILE *fp;                /*定义一个文件指针*/          int i;          fp=fopen("CLIB", "rb");  /*打开当前目录名为CLIB的文件只读*/          if(fp==NULL)             /*判断文件是否打开成功*/             puts("File open error");/*提示打开不成功*/          i=fclose(fp);            /*关闭打开的文件*/          if(i==0)                 /*判断文件是否关闭成功*/            printf("O,K");         /*提示关闭成功*/          else            puts("File close error");/*提示关闭不成功*/     }

memset()

他的填充是以字节为单位,一般用于对字符型变量的初值进行赋值.
memset可以方便的清空一个结构类型的变量或数组。
memset为内存填充函数,包含在

for (int i=0; i<n; i++) {s[i] = v; }

memset函数的用法:
将已开辟内存空间 s 的首 n 个字节的值设为值 c
下面是一个例子:

#include <stdio.h> #include <string.h> main(){      char *s="Golden Global View";       clrscr();       memset(s,'G',6);      printf("%s",s);       getchar();      return 0; }

memset() 函数常用于内存空间初始化。如:

char str[100]; memset(str,0,100); 

memset用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为‘ ’或‘\0’;例:char a[100];memset(a, ‘\0’, sizeof(a));

fgets()

fgets()函数用于从文件流中读取一行或指定个数的字符,其原型为:
char * fgets(char * string, int size, FILE * stream);
参数说明:
string为一个字符数组,用来保存读取到的字符。
size为要读取的字符的个数。如果该行字符数大于size-1,则读到 size-1 个字符时结束,并在最后补充’ \0’;如果该行字符数小于等于 size-1,则读取所有字符,并在最后补充 ‘\0’。即,每次最多读取 size-1 个字符。
stream为文件流指针。
【返回值】读取成功,返回读取到的字符串,即string;失败或读到文件结尾返回NULL。因此我们不能直接通过fgets()的返回值来判断函数是否是出错而终止的,应该借助feof()函数或者ferror()函数来判断。
注意:fgets()与gets()不一样,不仅仅是因为gets()函数只有一个参数 FILE *stream,更重要的是,fgets()可以指定最大读取的字符串的个数,杜绝了gets()使用不当造成缓存溢出的问题。
【实例】从myfile.txt文件中读取最多99个字符。

    #include <stdio.h>    int main()    {        FILE * pFile;        char mystring [100];        pFile = fopen ("myfile.txt" , "r");        if (pFile == NULL)            perror ("Error opening file");        else {            if ( fgets (mystring , 100 , pFile) != NULL )                puts (mystring);            fclose (pFile);        }        return 0;    }

又如,使用fputs()写一个文件,然后fgets()读取文件内容并显示。

    #include <stdio.h>    #include<stdlib.h>    #include<io.h>    #include<conio.h>    int main(void)    {        char msg[] = "This is a test!\n secend line\n";        char msgget[100];        int i = 0;        FILE* fstream;        fstream = fopen("test.txt","w+");        /*打开文件*/        if(fstream==NULL)        {            printf("Open file failed!\n");            exit(1);        }        fputs(msg, fstream);                /*写入文件*/        fflush(fstream);        close(fileno(fstream));        fstream=fopen("test.txt","r");        i = 0;        fgets(msgget,3,fstream) ;        fputs(msgget, stdout);        printf("\n");        fgets(msgget,100,fstream) ;/*从流中读取一行或者指定个数字符*/        fputs(msgget, stdout); /*送一个字符串到流中*/        return 0;    }

运行结果:
Th
is is a test!

strncmp()

比较字符串的前n个字符(区分大小写)
strncmp() 用来比较两个字符串的前n个字符,区分大小写,其原型为:
int strncmp ( const char * str1, const char * str2, size_t n );
【参数】str1, str2 为需要比较的两个字符串,n为要比较的字符的数目。
字符串大小的比较是以ASCII 码表上的顺序来决定,此顺序亦为字符的值。strncmp()首先将s1 第一个字符值减去s2 第一个字符值,若差值为0 则再继续比较下个字符,直到字符结束标志’\0’,若差值不为0,则将差值返回。例如字符串”Ac”和”ba”比较则会返回字符”A”(65)和’b’(98)的差值(-33)。
注意:要比较的字符包括字符串结束标志’\0’,而且一旦遇到’\0’就结束比较,无论n是多少,不再继续比较后边的字符。
【返回值】若str1与str2的前n个字符相同,则返回0;若s1大于s2,则返回大于0的值;若s1 若小于s2,则返回小于0的值。
注意:如果两个字符不同,GCC返回该字符对应的ASCII码的差值,VC返回-1或1。但是让人为难的是,strnicmp()、strcmp()、stricmp()在GCC和VC下都返回-1或1,而不是ASCII的差值。
对2组字符串进行比较。

    #include<stdio.h>    #include<string.h>    int main(void){        char* s1 = "http://see.xidian.edu.cn/cpp/u/xitong/";        char* s2 = "HTTP://see.xidian.edu.cn/cpp/u/xitong/";        char* s3 = "abc";        char* s4 = "abcxyz";        char* s5 = "123456";        char* s6 = "123";        printf("s1-s2=%d\n", strncmp(s1, s2, 20));  // 是否区分大小写        printf("s3-s4=%d\n", strncmp(s3, s4, 100));  // s3的长度小于s4        printf("s5-s6=%d\n", strncmp(s5, s6, 100));  // s5的长度大于s6        return 0;    }

VC6.0下运行结果:
s1-s2=1
s3-s4=-1
s5-s6=1

GCC下运行结果:
s1-s2=32
s3-s4=-120
s5-s6=52

strtok()函数

字符串分割.
头文件:#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 i jkl;mnop;qrs tu vwx y;z //-与:字符已经被\0 字符取代

strtoul()

将字符串转换成unsigned long(无符号长整型数)
头文件:#include stdlib.h
strtoul() 函数源自于“string to unsigned long”,用来将字符串转换成无符号长整型数(unsigned long),其原型为:
unsigned long strtoul (const char* str, char** endptr, int base);
【参数说明】str 为要转换的字符串,endstr 为第一个不能转换的字符的指针,base 为字符串 str 所采用的进制。
【函数说明】strtoul() 会将参数 str 字符串根据参数 base 来转换成无符号的长整型数(unsigned long)。参数 base 范围从2 至36,或0。参数 base 代表 str 采用的进制方式,如 base 值为10 则采用10 进制,若 base 值为16 则采用16 进制数等。
strtoul() 会扫描参数 str 字符串,跳过前面的空白字符(例如空格,tab缩进等,可以通过 isspace() 函数来检测),直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时(‘\0’)结束转换,并将结果返回。
两点注意:
当 base 的值为 0 时,默认采用 10 进制转换,但如果遇到 ‘0x’ / ‘0X’ 前置字符则会使用 16 进制转换,遇到 ‘0’ 前置字符则会使用 8 进制转换。
若 endptr 不为NULL,则会将遇到的不符合条件而终止的字符指针由 endptr 传回;若 endptr 为 NULL,则表示该参数无效,或不使用该参数。本文最后的范例没有展示 endptr 参数的使用,你可以参考 strtol() 函数的范例来更加直观地了解 endptr 参数。
【返回值】返回转换后的无符号长整型数;如果不能转换或者 str 为空字符串,那么返回 0;如果转换得到的值超出unsigned long int 所能表示的范围,函数将返回 ULONG_MAX(在 limits.h 头文件中定义),并将 errno 的值设置为 ERANGE。
温馨提示:ANSI C 规范定义了 stof()、atoi()、atol()、strtod()、strtol()、strtoul() 共6个可以将字符串转换为数字的函数
范例:将输入的字符串转换为无符号长整型。

    #include <stdio.h>    #include <stdlib.h>    int main ()    {        char buffer [256];        unsigned long ul;        printf ("Enter an unsigned number: ");        fgets (buffer, 256, stdin);        ul = strtoul (buffer, NULL, 0);        printf ("Value entered: %lu.\n", ul);        system("pause");        return 0;    }

运行结果:
Enter an unsigned number: 017cyuyan
Value entered: 15.
由于 base 参数被设置为 0 并且字符串“017cyuyan”以“0”开头,所以采用 8 进制转换。

0 0
原创粉丝点击