在C语言中没有C++或Java中的string这个类型来表示字符串,在C中字符串实际上是使用\0结尾的一维字符数组。
下面初始化创建了一个helloworld字符串,由于在数组的末尾存储了空字符,所以字符数组的大小比单词helloworld的字符数多一个。
char str[8] ={‘h’,‘e’,‘l’,‘l’,‘o’,‘w’,‘o’,‘r’,‘l’,‘d’,\0’};或 char str[] = “helloworld”;
字符在计算机中都是以ASCII值的形式来存储。
以char str[]="helloworld"为例:
1、sizeof(str): sizeof其实是一个关键字(并不是函数),它是用来求一个存储空间的大小。sizeof(str)求str存储空间的大小其值为11(包含‘\0’这个存储空间)。
2、strlen(str): strlen()是用来求字符串长度的函数,在求长度时遇到‘\0’就结束,所以strlen(str)其值为10(不包含\0)。如果char str[10] ="helloworld"则长度不确定了,如果紧跟着字符串末尾是‘\0’则值为10,否则无法确定。
3、strcpy(str1,str2): 如果想把一个字符串赋值给另外一个字符串,不可以使用str1=str2(这是把str2字符串的首地址赋给str1字符串的首地址),而需要使用字符串拷贝函数strcpy()。如果strcpy(buf,str)把str拷贝到buf中去,这时候要注意buf要有足够的空间来容纳str,否则buf会溢出导致整个程序终止。所以这个函数不是安全的函数,一般建议使用strncpy,如:strncpy(buf,str,sizeof(buf))。
4、strcat(str1,str2): 字符串连接函数,用来将str2连接到str1后面去。对于该函数使用同样要注意str1要有足够的空间容纳这两个字符串的长度,否则溢出;建议用strncat()。
5、strcmp()、strncmp()、strcasecmp()、strncasecmp():比较两个字符串的内容是否相同并不能使用str1 == str2来判断,而是使用这个几个函数来判断。其中strcmp()和strncmp()区分大小写,strcasecmp()和strncasecmp()不区分大小写。实现原理:拿第一个字符串的每一个字符与第二个字符串的相应字符做减法,如果不为0则返回差值,如果返回值为0,则表示两个字符串相同!
6、strchr(s1,ch): 查找并返回字符ch在s1中第一次出现的位置,如果没找到则返回NULL,strrhr(s1,ch)查找并返回字符ch在S1中最后一次出现的位置。
7、strstr(s1,s2): 查找并返回字符串s2在s1中第一次出现的位置,如果没找到则返回NULL,如果不区分大小写查找字符串则使用strcasestr()函数。
8、sprintf()、snprintf():用来格式化生成一个字符串,它的工作方式与printf()相同,只是printf把字符串打印到标准输出上,而sprintf()则输出到buf中去。例如:snprintf(sn_buf,sizeof(sn_buf),“huawei-%02d-%04d”,week,serial)。