C和指针第9章[字符串 字符 字节]
1字符串是一串0个和多个字符,以NUL字符结尾的
2.strlen函数的返回值是一个无符号整形,也就是说这个if(strlen(x)-strlen(y)>=0)一定是成立的,因为左边是无符号整形的操作,不可能小于0
3.strcpy,strcat会在新字符串后面自动加上一个’\0’结尾符.但是这些函数需要保证有足够的空间.这两个函数的返回值是第一个参数的一份拷贝.
4.strcmp,返回不一定是 1 -1 0,标准只是说返回大于0的和小于0的,不一定是1和-1.也不要写成if(strcmp(a,b))这样的,因为当a和b相等的时候这个返回的是0,所以有时你会很郁闷
5.strncpy(dst,src,len),如果strlen(src)
6.strncat(dst,src,len)和strncpy不一样,它不管dst的空间够不够,总是会把len个字符连接在dst后面[如果strlen(str)
11.memcpy(void dst,void cosnt src,size_t len);//dst和src不可重叠
memmove(void dst,void const str,size_t len);//dst和src可重叠,速度没上一个快
memcmp(void const dst,void const src,size_t len);
memchr(void const a,int ch,size_t len)
memset(void a,int ch,size_t len);
前4个和str开头的功能类似,不过这里不适以NUL结尾,而是len个字节,最后一个是把len字节置为ch.
这里有一个区分差别的.
memchr(buff,0,SIZE)-buffer
strlen(buff)
关于这两个的区别.答案如下
如果buff以NUL字符结尾,那么没区别,都是得到buff的长度,不过strlen返回的是无符号数,但是减法得到的是有符号的.
如果buff不以NUL字符结尾的话,memchr返回一个NULL指针,减去buff将产生一个无意义的结果,strlen则会一直找下去,知道发现一个NUL字符位置.
还有一个就是如果你要找的是NUL字符的话,就得用内存操作函数了,因为字符串函数不能找到NUL字节.