C语言经常使用函数——笔试经常使用

在公司笔试时常常须要调用或者实现c语言中的一些函数。主要包括:一、字符串处理函数。二、内存操做函数。数组

字符串处理函数:安全

size_t strlen(const char *s);
/*功能:计算指定指定字符串s的长度,不包含字符串结束符‘\0’
参数:
s:字符串首地址
返回值:字符串s的长度,size_t为unsigned int类型
*/

/*char *strcpy(char *dest, const char *src);
功能:把src所指向的字符串复制到dest所指向的空间中,'\0'也会拷贝过去
参数:
    dest:目的字符串首地址
    src:源字符首地址
返回值:
    成功:返回dest字符串的首地址
    失败:NULL
注意:此函数不是一个安全的函数,由于没有指定copy的大小,可能会形成越界。推荐使用strcpy_s(char *dest,size_t size,const char *src)
*/
int strcmp(const char *s1, const char *s2);
/*功能:比较 s1 和 s2 的大小
参数:
    s1:字符串1首地址
    s2:字符串2首地址
返回值:
    相等:0
    大于:>0
    小于:<0
*/  
char *strcat(char *dest, const char *src);
/*功能:将src字符串链接到dest的尾部,‘\0’也会追加过去
参数:
    dest:目的字符串首地址
    src:源字符首地址
返回值:
    成功:返回dest字符串的首地址
    失败:NULL
*/
char *strstr(const char *haystack, const char *needle);
/*功能:在字符串haystack中查找字符串needle出现的位置
参数:
    haystack:源字符串首地址
    needle:匹配字符串首地址
返回值:
    成功:返回第一次出现的needle地址
*/
char *strtok(char *str, const char *delim);
/*功能:来将字符串分割成一个个片断。当strtok()在参数s的字符串中发现参数delim中包含的分割字符时, 则会将该字符改成\0 字符,当连续出现多个时只替换第一个为\0。
参数:
    str:指向欲分割的字符串
    delim:为分割字符串中包含的全部字符
返回值:
    成功:分割后字符串首地址
    失败:NULL
注意:在第一次调用时:strtok()必需给予参数s字符串
日后的调用则将参数s设置成NULL,每次调用成功则返回指向被分割出片断的指针
*/
//strtok调用演示
char a[100] = "adc*fvcv*ebcy*hghbdfg*casdert";
char *s = strtok(a, "*");//将"*"分割的子串取出
while (s != NULL)
{
    printf("%s\n", s);
    s = strtok(NULL, "*");
}



int sprintf(char *str, const char *format, ...);
/*功能:根据参数format字符串来转换并格式化数据,而后将结果输出到str指定的空间中,直到出现字符串结束符 '\0'  为止。
参数:
    str:字符串首地址
    format:字符串格式,用法和printf()同样
返回值:
    成功:实际格式化的字符个数
    失败: - 1
*/
int sscanf(const char *str, const char *format, ...);
/*功能:从str指定的字符串读取数据,并根据参数format字符串来转换并格式化数据。
参数:
    str:指定的字符串首地址
    format:字符串格式,用法和scanf()同样
返回值:
    成功:实际读取的字符个数
    失败: - 1
*/  
int atoi(const char *nptr);
/*功能:atoi()会扫描nptr字符串,跳过前面的空格字符,直到遇到数字或正负号才开始作转换,而遇到非数字或字符串结束符('\0')才结束转换,并将结果返回返回值。
参数:
    nptr:待转换的字符串
   返回值:成功转换后整数
*/
char*itoa(int value,char*string,int radix);
/*功能:int value 被转换的整数,char *string 转换后储存的字符数组,int radix 转换进制数,如2,8,10,16 进制等
参数:
    value:须要转换的值
    char *str:字符串首地址
    radix:基数,也就是须要转换的进制数
返回值:函数返回一个指向 str,无错误返回。

二、内存操做函数函数

void *memset(void *s, int c, size_t n);
/*功能:将s的内存区域的前n个字节以参数c填入
参数:
    s:须要操做内存s的首地址
    c:填充的字符,c虽然参数为int,但必须是unsigned char , 范围为0~255
    n:指定须要设置的大小
返回值:s的首地址
*/
void *memcpy(void *dest, const void *src, size_t n);
/*功能:拷贝src所指的内存内容的前n个字节到dest所值的内存地址上。
参数:
    dest:目的内存首地址
    src:源内存首地址,注意:dest和src所指的内存空间不可重叠
    n:须要拷贝的字节数
返回值:dest的首地址
*/
void *memmove(void *dest, const void *src, size_t n);
/*memmove()功能用法和memcpy()同样,区别在于:dest和src所指的内存空间重叠时,memmove()仍然能处理,不过执行效率比memcpy()低些。*/
int memcmp(const void *s1, const void *s2, size_t n);
/*功能:比较s1和s2所指向内存区域的前n个字节
参数:
    s1:内存首地址1
    s2:内存首地址2
    n:需比较的前n个字节
返回值:
    相等:=0
    大于:>0
    小于:<0
*/
void *malloc(size_t size);
/*功能:在内存的动态存储区(堆区)中分配一块长度为size字节的连续区域,用来存放类型说明符指定的类型。分配的内存空间内容不肯定,通常使用memset初始化。
参数:
    size:须要分配内存大小(单位:字节)
返回值:
成功:分配空间的起始地址
失败:NULL
注意:对应的还有,void *calloc(size_t n, size_t size);
void *realloc(void *mem_address, unsigned int newsize);
*/
void free(void *ptr);
/*功能:释放ptr所指向的一块内存空间,ptr是一个任意类型的指针变量,指向被释放区域的首地址。对同一内存空间屡次释放会出错。
参数:
ptr:须要释放空间的首地址,被释放区应是由malloc函数所分配的区域。
返回值:无
*/