赞
踩
函数接口:
#include<string,h>
Char *strcpy(char *dest,const char *src); (2401.c)
Char *strncpy(char *dest,const char *src,size_t n);(2402.c)
这两个函数的返回值都是 dest指针
2.Malloc与free
Void foo(char *str,int n)
{
Char buf[?]:
Strncpy(buf,str,n);
…..
}
N是由参数传进来的,是多大不知道,那么buf要定义多大?这时我们希望动态分配一块全局的内存空间。
每个进程都有一个堆空间,C标准库函数malloc可以在堆空间动态分配内存,它的底层通过brk系统调用向操作系统申请内存,动态分配的内存用完之后可以用free释放,更准确地说是归还给了malloc,下次调用malloc时这块内存可以再次分配出来。
#include<stdlib.h>
Void *malloc(size_t size);(2403.c)
返回值:成功返回所分配的首地址,出错返回NULL
Void free(void *ptr)
2403.c
1.等号右边是void *类型,等号左边是unit_t *类型,编译器会做隐式类型转换,
2.虽然内存耗尽是很不常见的错误,但写程序要规范,malloc之后应该判断是否成功
3.Free(p),p所指的内存空间是归还了,但是p的值并没有变,因为从free的函数接口来看根本没有改变p的值,p现在指向的内存空间已经不属于用户程序,换句话说,p成了野指针,所以应该在free(p)之后手动置p=NULL
4.应该先free(p->msg),后free(p),顺序不能颠倒,如果先free(p),p成为野指针,就不能再访问p->msg了
给字符串赋初值
#include<string.h >
Void *memset(void *s,int c,size_t n)
返回值:S指向哪,返回的指针就指向哪
Char buf[10];
Memset(buf,0,10)通过这个清零
Memset函数给一段内存(从s所指的地址开始的n个字节)赋初值,把每个字节都填充为C的值,通常高用memset时传给C的值是0,把一块内存区清零。
取字符串的长度
#include<string.h>
Size_t strlen(const char *s)
返回值:字符串的长度
该函数从S所指的第一个字符开始找’\0’字符,一旦找到就返回的,返回的长度不包括’\0’字符。
Buf[ ]=”hello”;则strlen(buf)=5
#include <string.h>
Void *memcpy(void *dest,const void *src,size_t n);
Void *memmove(void *dest,const void *src,size_t n);
返回值:dest指向哪,返回的指针就指向哪
2404.C
连接字符串
#include<stdio.h>
Char *strcat(char *dest, const char *src)
Char *strncat(char *dest, const char *src,size_t n);
返回值:dest指向哪,返回的指针就指向哪
Strcat把src所指的字符串连接到dest所指的字符后面,缓冲区s的内容没有变,缓冲区d中保存着字符串d中的内容,注意原来的’\0’ 被覆盖,而后面加上来的字符串的’\0’被保留
2505.c
比较字符串
#include<string.h>
Int memcmp(const void *s1,const void *s2,size_t n);
Int strcmp(const void *s1,const void *s2);
Int strncmp(const void *s1,const void *s2,size_t n);
返回值:负值表示s1小于s2,0表示s1等于s2,正值表示s1>s2
1.memcmp从前到后比较缓冲区s1和s2的前n个字节(不管里面有没有’\0’), 负值表示s1小于s2,0表示s1等于s2,正值表示s1>s2
2.strcmp把s1和s2当字符串 比较,在其中一个字符串中遇到’\0’时结束(最后的’\0’也参加比较)
3.Strncmp的比较结束条件:要么在其中一个字符串是遇到’\0’时结束(strcmp),要么比较完n个字符(memcmp)。
搜索字符串
#include<string.h> 2406.c
Char *strchr(const char *s,int c)(在字符串s中从前到后找字符C,找到字符C第一次出现的位置时就返回,返回的指针就指向这个位置,如果找不到,就返回NULL)
Char *strrchr(const char *s,int c)(与strchr一样,只不过是从右往左找)
返回值:如果找到字符C,返回字符串S中指向字符C的指针,如果找不到就返回NULL
#include<string.h>
Char *strstr(const char *haydtack, const char *needle)
返回值:如果找到子串,返回值指向子串的开头,如果找不到就返回NULL
分割字符串
#include <string.h>
Char *strtok(char *str, const char *delim);
参数str是待分配的字符串,delim是分隔符,可以指定一个或多个分隔符,strtok遇到其中任何一个分隔符就会分割字符串
2407.c
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。