
一、C语言中的字符串
字符串是一种重要的数据类型,但是C语言并没有显示的字符串数据类型,不像java有String ,OBC有NSString等等。所以C语言中的字符串一般以字符串常量的形式出现或者存储与字符数组中。
每个字符串的末尾都添加了代码为0的特殊字符,这个字符称为空字符(不要和NULL搞混C中的字符串),写作\0。c strchr函数字符串,总是由\0字符结束,所以字符串的长度永远比字符串中的字符数多1。可以将\0字符添加到字符串的结尾,但是这会使字符串的末尾有两个\0的字符。\0 即是字符串结束的标志。
二、字符数组存储字符串
声明如:char str[4];
初始化如:str="abc";
例子1:
int main(void)
{
char str[3]=“123”;
printf("%s",str);
return 1;
}
这样的程序,编译的时候直接不能让通过,会报下面的错误:
: array bounds overflow。
因为,这样的写法就是声明并初始化一个字符串,而字符串必须使用\0结尾,所以数组才会越界。如果像下面:
例子2:
int main(void)
{
char str[3]={'1','2','3'};
printf("%s",str);
return 1;
}
这样写,就是声明并初始化一个字符数组,当然不会报错,可是看输出
结果却和奇怪,其实一点也不用奇怪,用%s的形式输出一个字符数组,那么就会把这个字符数组当字符串输出,可是他并不是一个正确的字符串式,所以只能根据数组指针的后移,一直不断的输出,直到遇到内存中随机的出现的\0才会结束,所以才会有这样的结果。
所以在声明和初始化一个字符串的时候一定要注意。一般可以这样去声明和初始化一个字符串:
char str[]="123123asda";
数组的长度自己并不指定,而是有系统自己确定,这样就不会出现数组越界的问题了。
三、使用库函数操作字符串
字符串函数在<string.h>头文件中声明,所以如果要使用它们,需要在程序的开始处使用include包含进来。
1、复制字符串
strcpy
函数原型:char *strcpy(char *destin, char *source);
参数类型为字符数组名,destin为目标字符串,source为源字符串。将字符串source的内容复制到destin,注意该函数不检查数组长度,所以要确保destin的数组能够容纳source中的所有字符。
另一个可用的函数strncpy
函数原型;char * strncpy(char *dest, char *src, size_t n);
将字符串src中最多n个字符复制到字符数组dest中(它并不像strcpy一样遇到NULL才停止复制,而是等凑够n个字符才开始复制),返回指向dest的指针。第三个参数是一个size_t类型的整数。它指定了要复制的字符数n,举例:
2、检测字符串的实际长度

strlen
函数原型: size_t strlen(conset char *s);
功能: strle函数求的是字符串的长度,它求得方法是从字符串的首地址开始到遇到第一个'\0'停止计数,如果你只定义没有给它赋初,这个结果是不定的,它会从字符串首地址一直记下去,直到遇到'\0'才会停止。
sizeof(string)可以输出一个字符串占的字节数,因为一个char是一个字节,在加上结束符\0(可能不止一个\0),所以sizeof得出的结果比字符串实际的长度大。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-34907-1.html
美国对英国的胜利不就是这样的吗