在公司笔试时常常须要调用或者实现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函数所分配的区域。 返回值:无 */