c语言字符串操作内存操作。C语言是不存在字符串(String)这个数据类型的,因为它觉得没有必要为此创建一种新的类型,字符串可以存储在字符数组或String Literal里面,而String Literal实质上也是字符数组,用一个字符指针指向首字符,表示字符串的入口,由于字符指针在遍历时不知道哪里是字符串的尾部,我们可以用一个整数表示长度,也可以在尾字符后添加一个0(NULL)作为结束标示符,相对于占用一个整数,C语言采用了添加0作为结束标示符。
虽然没有字符串类型,但是C语言为字符串提供了大量的函数操作,请看:
【普通操作】
长度:strlen,strspn,strcspn 注:strspn表示连续包含指定字符的长度,c表示补(complemented),即连续不包含。
举例:ptr=buf+strspn(buf,” \n\r\f\t\v”)指向第一个非空白符的字符地址。
复制:strcpy,strncpy
连接:strcat,strncat
比较:strcmp,strncmp,strcasecmp, strncasecmp 注:strcasecmp忽略大小写
查找:strchr,strrchr,strpbrk,strstr,strrstr,strrpstr 注:r表示反向,pbrk表示多个
分割:strtok
举例:static char whitespace[] = ” \t\f\r\v\n”;
char *token;
for(token = strtok(line, whitespace); token != NULL; token = strtok(NULL, whitespace))
{ … }
【内存操作】 注:内存操作相对于普通操作效率更高。
复制:memcpy,memmove,memccpy 注:memmove比memcpy更强更慢,当dst和src重叠时仍能正确工作;memccpy返回值为c的下一个字节地址
赋值:memset
比较:memcmp
查找:memchr
【转换操作】 注:sprintf是万能,下面所有操作都包含。
字符串 → 浮点数 :atof,strtod 注:strtod可以指定错误转换后指向的字符指针和基数
浮点数 → 字符串 :gcvt,ecvt,fcvt 注:gcvt原样输出,ecvt和fcvt都四舍五入
字符串 → 整数 :atoi,atol,strtol,strtoul
整数 → 字符串 :itoa,ltoa