内容介绍:
一、字符数组
二、字符串处理函数
一、字符数组
字符串常量:”FishC小甲鱼,鱼C工作室”
字符数组:
例子1、
int main
{
char str[10];
str[0] = 'F';
str[1] = 'i ';
str[2] = 's ';
str[3] = 'h';
str[4] = 'c';
str[5] = '\0';
....-
}
例子2、
int main
{
//初始化字符数组的每个元素
char str1[10] = { 'F', 'i'o's', 'h', 'c', '\0'};
//可以不写元素的个数,因为编译器会自动计算
char str3[] = i 'F', 'i', 's', 'h', 'C', '\0'};
//使用字符串常量初始化字符数组
char str4[] = { "FishC"};
//使用字符串常量初始化,可以省略大括号
char str5[] = "FishC";
}
二、字符串处理函数
1) 获取字符串的长度: strlen
原型:size_t strlen (const char *__s);
功能:返回一个字符串(__src
)的长度,即字节(符)数,这里仅考虑ASCII字符;
#include <stdio.h>
#include <string.h>
int main( )
{
char str[] "I Love FishC.com!";
printf("sizeof str = %d\n",sizeof(str));
printf("strlen str = %u\n" ,strLen(str));
return 0;
}
2) 拷贝字符串:strcpy和strncpy
strcpy:
原型:char *strcpy (char * __dest, const char * __src);
功能:将一个字符串(__src
)拷贝到另一个字符串缓冲区中(__dest
),并返回拷贝后的字符串指针;
注意:
1. 必须保证拷贝后的缓冲区即上例中str2的大小足够,否则造成内存溢出到未分配的地址,容易产生各种未知错误;
2. 由于该函数原理是逐字节复制,所以如果str1和str2的空间有重叠,则会造成覆盖。
strncpy:
原型:char *strncpy (char * __dest, const char *__src, size_t __n);
功能:将一个字符串(__src
)拷贝到另一个字符串缓冲区中(__dest
),拷贝最多不超过__n
字节,并返回拷贝后的字符串指针;
注意: strncpy这个函数并不会自动的在字符串结尾加’\0’,需要自己去增加。
代码:
#include <stdio.h>
#include <string.h>
int main( )
{
char str1[] = "original String" ;
char str2[] = "New String";
char str3[100] ;
strcpy(str1, str2) ;
strcpy(str3,"Copy Successful") ;
printf("strl: %s\n”, strl) ;
printf("str2: %s\n", str2);
printf("str3: %s\n”,str3) ;
return 0 ;
}
3) 连接字符串:strcat和strncat
strcat:
原型:char *strcat (char *__dest, const char *__src);
功能:将一个字符串(__src
)拼接到另一个字符串缓冲区中(__dest
),并返回拼接后的字符串指针;
注意:需要保证str1有足够的存储空间,否则,程序会顺着内存地址往后写,破坏其他内存数据。
strncat:
原型:char *strncat (char *__dest, const char *__src, size_t __n);
功能:将一个字符串(__src
)拼接到另一个字符串缓冲区中(__dest
),最多不超过__n
个字节,并返回拼接后的字符串指针;
代码:
#include <stdio.h>
#include <string.h>
int main( )
{
char strl[] = "To be or not to be";
char str2[40];
strncpy(str2,strl, 5);
str2[5] = ‘\0’;
printf("str2: %s\n", str2);
return 0 ;
}
#include <stdio.h>
#include <string.h>
int main( )
char strl[] = "I Love”;
char str2[] = "FishC.com!" ;
strcat(str1,””);
strcat(strl, str2) ;
printf("strl: %s\n", str1);
return 0 ;
4) 比较字符串:strcmp和strncmp
strcmp:
原型: int strcmp (const char *__s1, const char *__s2);
功能:比较字符串__s1和字符串__s2,返回比较结果,如果相等,则返回0;
比较方式:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇’\0’为止;
返回结果:当s1<s2时,返回值<0;当s1=s2时,返回值=0;当s1>s2时,返回值>0;
strncmp:
原型:int strncmp (const char *__s1, const char *__s2, size_t __n);
功能:比较字符串__s1
和字符串__s2
的__n
个字符,返回比较结果,如果相等,则返回0;
比较方式: 两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇’\0’为止;
返回结果:当s1<s2
时,返回值<0;当s1=s2
时,返回值=0;当s1>s2
时,返回值>0;
代码:
#include <stdio.h>
#include <string.h>
int main( )
char strl[] = "FishC.com!" ;
char str2[] = "FishC.com !
if (!strcmp(strl, str2) )
{
printf("两个字符事完全一致1 \n" );
}
else
{
printf("两个字符串存在差异! \n")
}
return 0;
}