strcmp 比较 strcat 连接 strcpy 替换 strupr 小转大 strlwr 大转小 strlen 字符串长度
1. strlen(char const* s);
函数传入的是c风格字符串(即以‘\0’结尾的字符数组),返回的长度为size_t(即unsigned int),其长度不包括'\0'。
2. strcpy(char* dest, char const* source);
dest:目标指针;
source:是源指针,传入的必须是c风格字符串或者字符数组。
返回值: dest指针
注意:1. 该函数会将包括'\0'在内的source全部拷贝到dest。如果char* source="abcd"; dest为char[],则dest应该定义为char[5];
2. src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
3. C语言中不支持用赋值符号“=”直接将一个字符数组赋值给另一个字符数组。因为C语言不支持运算符重载。故而必须用strcpy操作。
3. strncpy(char* dest, char const* source, size_t n);
n代表可以指定字符个数进行赋值。
功能:将字符串source中最多n个字符复制到字符数组dest中(它并不像strcpy一样遇到NULL才停止复制,而是等凑够n个字符才开始复制),返回指向dest的指针。要求:如果n > dest串长度,dest栈空间溢出产生崩溃异常。该函数注意的地方和strcpy类似,但是n值需特别注意。
1)src串长度<=dest串长度,(这里的串长度包含串尾NULL字符)
如果n=(0, src串长度),src的前n个字符复制到dest中。但是由于没有NULL字符,所以直接访问dest串会发生栈溢出的异常情况。一般建议采取memset将dest的全部元素用null填充,如:memset(dest,0,8)(8为从dest起始地址开始前8个位置填充null,dest可以为字符指针和数组名)。
注意:char* p="abc"; char ch[5]; sizeof(p)为4(包含null)(有些编译器不行),sizeof(ch)为5。
这样:
如果n = source串长度,与strcpy一致。
如果n = dest串长度,[0,src串长度]处存放于dest字串,(src串长度, dest串长度]处存放NULL。
2)source串长度>dest串长度
如果n =dest串长度,则dest串没有NULL字符,会导致输出会有乱码。如果不考虑source串复制完整性,可以将dest最后一字符置为NULL。
所以,一般把n设为dest(含null)的长度(除非将多个source复制到dest中)。当n=dest串长度时,定义dest为字符数组,因为这时没有null字符拷贝。