C语言常用功能函数集合

C语言常用功能函数集合

说明:作者将个人接触到的C语言功能函数记录下来,组成一个集合,便于查阅和加深印象。

 

1. 内存相关

malloc()函数 :申请一片连续的堆内存,字节为单位。分配所需的内存空间,并返回一个指向它的指针。用完注意用free函数释放该内存,防止内存泄漏。

#include <stdlib.h>   

void *malloc(size_t size)

例如:char        *Buf;

BufLen = BUFSIZE;  //BUFSIZE为整数
Buf = (char *)malloc(BufLen);  // char *可根据需求更改

 

memset()函数 :为新申请的内存进行初始化工作,字节为单位。

函数的功能是:将指针变量 s 所指向地址为起点,对其后 n 字节的内存单元用一个“整数” c 替换,注意 c 是 int 型。s 是 void* 型的指针变量,所以它可以为任何类型的数据进行初始化。

# include <string.h>
void *memset(void *s, int c, unsigned long n);

例如:  memset(Buf, 0x00, BufLen);

 

memcpy() 函数: 从存储区 str2 复制 n 个字节到存储区 str1

include <string.h>

void *memcpy(void *str1, const void *str2, size_t n) 

例如1:char *s="http://www.runoob.com";

char d[20]; memcpy(d, s+11, 6);  // 从第 11 个字符(r)开始复制,连续复制 6 个字符(runoob)

// 或者 memcpy(d, s+11*sizeof(char), 6*sizeof(char));

d[6]='\0';

printf("%s", d);

 

例如2:

#define    SPL_HEADER              "****************"
char        *Buf;
memcpy(&Buf[0], SPL_HEADER, SPL_HEADER_SIZE);  //SPL_HEADER_SIZE = 16

补充知识:
#include<stdio.h>
int main()
{
    char  *pMem;    
    pMem = (char *)malloc(10);
    printf("pMem = %p\n",pMem);
    printf("&pMem[0] = %p\n",&pMem[0]);
    printf("&pMem[1] = %p\n",&pMem[1]);
    printf("&pMem[2] = %p\n",&pMem[2]);
    printf("&pMem[3] = %p\n",&pMem[3]);

    return 0;
}

编译结果:
pMem = 0x15deb10
&pMem[0] = 0x15deb10
&pMem[1] = 0x15deb11
&pMem[2] = 0x15deb12
&pMem[3] = 0x15deb13

 

2. 文件相关

fopen()函数:打开一个文件并返回文件指针。配套fclose()函数使用。

头文件:#include <stdio.h>
fopen()是一个常用的函数,用来以指定的方式打开文件,其原型为:
FILE * fopen(const char * path, const char * mode);
【参数】path为包含了路径的文件名,mode为文件打开方式。
 

例如1:FILE  * fstream;

fstream=fopen("test.txt","at+");

fclose(fstream);

例如2:FILE  * fp;

// 3.1 打开源bin
fp = fopen(argv[1], "rb");    //argv[1]为文件名的指针,指向的为char类型

 

fseek()函数:用来移动文件流的读写位置.

头文件:#include <stdio.h>
定义函数:int fseek(FILE * stream, long offset, int whence);
返回值:当调用成功时则返回0, 若有错误则返回-1

1、参数stream 为已打开的文件指针,
2、参数offset 为根据参数whence 来移动读写位置的位移数。参数 whence 为下列其中一种:
    SEEK_SET 从距文件开头offset 位移量为新的读写位置. SEEK_CUR 以目前的读写位置往后增加offset 个位移量.
    SEEK_END 将读写位置指向文件尾后再增加offset 个位移量. 当whence 值为SEEK_CUR 或SEEK_END 时, 参数offset 允许负值的出现.

下列是较特别的使用方式:
1) 欲将读写位置移动到文件开头时:fseek(FILE *stream, 0, SEEK_SET);
2) 欲将读写位置移动到文件尾时:fseek(FILE *stream, 0, SEEK_END);

 

ftell()用来取得文件流目前的读写位置. 参数stream 为已打开的文件指针.

定义函数:long ftell(FILE * stream);

返回值:当调用成功时则返回目前的读写位置, 若有错误则返回-1

例如:fileLen = ftell(fp);

 

fread()函数:用于从文件流中读取数据

其原型为:头文件:#include <stdio.h>
size_t  fread(void *buffer, size_t size, size_t count, FILE * stream);

【参数】buffer为接收数据的地址,size为一个单元的大小,count为单元个数,stream为文件流。

fread()函数每次从stream中最多读取count个单元,每个单元大小为size个字节,将读取的数据放到buffer;文件流的位置指针后移 size * count 字节。

【返回值】返回实际读取的单元个数。如果小于count,则可能文件结束或读取出错;可以用ferror()检测是否读取出错,用feof()函数检测是否到达文件结尾。

 

fwrite()函数以二进制方式向文件流中写入数据,其原型为:
size_t fwrite(void * buffer, size_t size, size_t count, FILE * stream);

【返回值】返回成功写入的单元个数。如果小于count,则说明发生了错误,文件流错误标志位将被设置,随后可以通过ferror()函数判断。

例如: nbytes    = fwrite( a, 1, BufLen, fp);
    if ( nbytes != BufLen )
    {
        printf("destination file write error\n");
        free(Buf);
        fclose(fp);
        return -1;
    }

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值