【C语言的日常实践(八)】弦

串数据类型是一个重要的,但C有没有明确的语言字符串数据类型。头文件string.h它包括大多数字符串处理函数。

故,有操作的串。通常包括string.h头文件。

1、字符串的长度:对字符串进行的操作中,常常要对它进行求长度的操作。字符串的长度就是它所包括的字符个数。size_t strlen(char const *string);

注意:strlen返回一个类型为size_t的值,它是一个无符号整数类型。在表达式中使用无符号数可能导致不可预料的结果。

如以下两条表达式并不相等:

if(strlen(x) >= strlen(y)) .... /*依照预想的那样工作*/

if(strlen(x) - strlen(y) >= 0).../*永远为真,strlen的结果是个无符号数,所以操作符>=左边的表达式也将是无符号数*/

size_t
strlen(char const *string)
{
	int length;

	for(length = 0; *string++ != '\0';)
		length++;

	return length;
}
2、复制字符串:用于复制字符串的函数时strcpy。原型例如以下:char *strcpy(char *dst, char const *src); 它把參数src字符串拷贝到dst參数。dst參数的曾经内容将被覆盖掉并丢失。即使新的字符串比dst原先的内存更短,因为新字符串以NUL字节结尾,所以老字符串最后剩余的几个字符也会被有效地删除,(事实上并为被删除。能够使用地址訪问)。

我们必须确保目标字符数组的空间足以容纳须要复制的字符串。假设字符串比数组长,多余的字符仍被复制,它们将覆盖原先存储于数组后面的内存空间的值。在使用该函数前确保目标參数足以容纳源字符串,就能够避免大量的调试工作。

#include <string.h>
#include <stdio.h>

int
main(int argc, char **argv)
{
	char 	message[] = "Original message";
	printf("%c.\n", message[2]);//结果是Original中的i
	strcpy(message, "Different");
	printf("%s.\n", message);/*结果是Different,后面的message由于NUL的原因未显示*/
	printf("%c.\n", message[2]);//结果是Different中的f
	printf("%c.\n", message[12]);//结果是message中的s
	return 0;
}
3、连接字符串:把一个字符串加入(连接)到还有一个字符串的后面。

原型:char *strcat(char *dst, char const *src); 该函数要求dst參数原先已经包括了一个字符串,它找到这个字符串的末尾,并把src字符串的一份拷贝加入到这个位置。

相同应该确保目标字符数组剩余的空间足以保存整个源字符串。

#include <string.h>
#include <stdio.h>

int
main(int argc, char **argv)
{
	char message[100];
	strcpy(message, "Hello ");
	strcat(message, "World.\n");
	printf("message = %s",message);
	return 0;
}
注意:strcpy和strcat函数都返回它们第1个參数的一份拷贝,就是指向目标字符数组的指针。在实际应用中,它们的返回值常常仅仅是简单的被忽略。


4、字符串比較:比較两个字符串涉及对两个字符串相应的字符逐个进行比較,直到发现不匹配为止。

原型:int strcmp(char const *s1, char const *s2);

假设s1小于s2,返回值小于0;

假设s1大于s2。返回值大于0;

假设s1等于s2,返回值等于0。

5、其它字符串函数

char *strncpy(char *dst, char const *src, size_t len);向dst写入len个字符。假设strlen(src)的值小于len,dst数组就用额外的NUL字节填充到len长度。假设strlen(src)的值大于或等于len,那么仅仅有len个字符被拷贝到dst中。注意,它的结果将不会以NUL字节结尾。

char *strncat(char *dst, char const *src, size_t len);

intstrncmp(char const *s1, char const *s2, size_t len);



版权声明:本文博主原创文章,博客,未经同意不得转载。

posted @ 2015-09-23 10:06  phlsheji  阅读(170)  评论(0编辑  收藏  举报