1.字符串长度计算: strlen();
原型: size_t strlen( char *str );
示例代码:
void test_strlen()
{
char st1[30] = "hello";
printf("%d", strlen(st1));
char *st2 = "hel\0lo";
printf("%d", strlen(st2)); //3
char st4[] = { 'h', 'e', 'l', '\0', 'l', 'o' };
printf("%d", strlen(st4)); //3
char st5[] = { 'h', 'e', 'l', 'l', 'o' };
printf("%d", strlen(st5)); //???
char *st6 = (char*)malloc(sizeof(char)* 100);
gets(st6); //输入"hello"
printf("%d", strlen(st6)); //5
gets(st6); //输入"hel\0lo"
printf("%d", strlen(st6)); //7
//scanf("%s", st); getchar(); //不允许输入时加空格,但是不会清空缓冲区
//printf("%d", sizeof(st3)/sizeof(char)); //字符数组中间有'\0'元素时,不可以用strlen统计字符数量
}
2.字符串拼接: strcat() ;
原型:char *strcat( char *str1, const char *str2 );
示例代码:
void test_strcat()
{
char *str1;
str1 = (char*)malloc(sizeof(char)* 100);
gets(str1); //输入"Hello"
char* str3 = "Hello";
const char *str2 = "World";
puts(strcat(str1, str2)); //合法
puts(strcat(str3, str2)); //不合法
}
需要注意的事项:
1,str1是目标字符串,str2是源字符串.即str2拼接在str1后面;
2,返回的是str1的地址;
3,拼接前要确保str1所指向的内存区域足够容纳str1+str2的所有字符;
4,拼接的过程是str2直接从str1末尾的'\0'开始覆盖,也就是说str1的末尾字符将被改变.如果str1是常量则不允许使用该函数;
3.字符串比较:strcmp();
原型:int strcmp(const char *str1,const char *str2);
比较字符串str1与str2,相等返回0,不相等则str1>str2(比较每一个字母的ASCII码)返回1;反之返回-1
示例代码:
void test_strlcmp()
{
char *p1, *p2;
p1 = (char*)malloc(sizeof(char)*100);
p2 = (char*)malloc(sizeof(char)* 100);
while (1)
{
gets(p1);
gets(p2);
printf("%d\n\n", strcmp(p1, p2));
}
}
4.字符串复制:strcpy();
原型:char *strcpy(char *to,const char *from);
示例代码:
void test_strcpy()
{
char *p1, *p2;
char st[100];
//p1 = (char*)malloc(sizeof(char)* 100);
p2 = (char*)malloc(sizeof(char)* 100);
//char *p3 = "hello";
//gets(p1);
gets(p2);
gets(st);
//puts(strcpy(p1, p2));
//puts(strcpy(st, p2)); //合法
//puts(strcpy(p1, p2)); //不合法
}