关于一些C的函数

一、内存分配

1、memset

void *memset (void *s, int ch, size_t n);

将s所指向内存的前n个字节用ch替换,返回s。

用途:(1)为新申请的内存初始化 (2)对结构体或数组清零操作最快的方法

 

2、memcpy

void *memcpy (void *dest, const void *src, size_t n);

从src所指的内存地址的起始位置开始拷贝n个字节到dest所指内存地址的起始位置

返回:指向dest的指针

 

3、malloc

extern void *malloc (unsigned int num_bytes);

分配长度为num_bytes字节的内存块

返回:成功 被分配内存的指针

     失败 NULL

char *p=(char *)malloc(sizeof(char));

 

calloc

char *str=(char *)malloc(sizeof(char)*100);

比malloc多了初始化操作

memset(str,0,size);

 

4、realloc

extern void *realloc (void *mem_address, unsigned int newsize);

先判断mem_addresss是否有足够的连续空间,有则扩大地址,返回mem_address

空间不够,按照newsize重新分配空间,拷贝内容到新分配内存,释放原来mem_address

失败返回NULL

 

5、free 

 void free (void *ptr);

本质:切断指针ptr与内存块的联系

 

(1)与malloc()配对使用,如果是malloc或者calloc意思是申请一片内存,这个指针指向这个被申请的内存地址。

(2)如果ptr是NULL,free操作不会出问题;如果ptr不是NULL,连续两次free会报错

(3)定义指针,不申请内存。赋值是将变量的地址赋给指针的,变量是已经存在的 

 

二、文件操作

1、fgets

char *fgets (char *buf, int bufsize, FILE * stream);

从文件结构体指针stream中读取数据,每次读取一行,保存在buf指向的字符数组中,每次最多读取bufsize-1个字符(‘\0’)或者读到换行。成功返回buf,失败返回NULL。

2、feof

int feof (FILE *stream)

检测流上的文件结束符,如果文件结束,返回非0;文件未结束,返回0。

3、fseek

int fseek( FILE *stream, long offset, int origin );
第一个参数stream为文件指针
第二个参数offset为偏移量,正数表示正向偏移,负数表示负向偏移
第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SET
SEEK_SET: 文件开头
SEEK_CUR: 当前位置
SEEK_END: 文件结尾
其中SEEK_SET,SEEK_CUR和SEEK_END依次为0,1和2

4、fopen

5、fclose

 

三、字符串操作

1、strlen

extern unsigned int strlen (char *s)

计算字符串s的长度,不包括'\0',返回长度

 

2、strstr

extern char *strstr (const char *str1, const char *str2);

str1:被查找目标 

str2:要查找的对象

返回:str2第一次在str1中的位置,没有找到,返回NULL

 

3、strcmp

extern int strcmp(const char *s1, const char *s2);

比较字符串s1和s2,两个字符串自左向右逐个字符相比,直到出现不同的字符或遇到'\0'

返回:s1<s2 返回负数

   s1=s2 返回0

   s1>s2 返回正数

 

4、strncmp

int strncmp (const char *str1, const char *str2, size_t size);

类似strcmp,不同:指定比较size个字符

返回:相等 0

   不等 str1[n]-str2[n]

 

5、strchr

extern char *strchr (const char *s, char c)

查找字符串s中首次出现c的位置

返回:首次出现c位置的指针,s中不存在c返回NULL

 

6、sprintf

int sprintf (char *buffer, const char *format, [argument]...)

把格式化的数据写入某个字符串缓冲区。

buffer:指向将要写入的字符串的缓冲区

format:格式化字符串

[argument]:可选参数

返回字符串的长度

 

7、strcpy

extern char *strcpy (char *dest, const char *src);

把从src地址开始且含有NULL结束符的字符串复制到dest开始的地址空间

内存区域不能重叠、dest有足够空间

返回dest指针

 

8、strncpy

char *strncpy (char *dest, char *src, size_t num);

复制多少由num决定

返回指向dest指针

num > dest串长度 占空间溢出崩溃

建议将n置为dest串长度

 

9、strcat

extern char *strcat (char *dest, char *src);

把src所指字符串添加到dest结尾处,并添加'\0'

 

10、StrUpper

StrUpper(ptr);

返回指针字符串ptr的大写形式

posted @ 2014-04-24 17:13  岂曰无衣  阅读(58)  评论(0)    收藏  举报