Chinaunix首页 | 论坛 | 博客
  • 博客访问: 524501
  • 博文数量: 68
  • 博客积分: 2501
  • 博客等级: 大尉
  • 技术积分: 713
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-07 17:49
个人简介

文章分类

全部博文(68)

分类: LINUX

2010-04-29 12:37:02

在C语言中,没有单独的字符串数据类型,而是通过字符数组的操作来实现的。字符串的内容保上在字符数组里,规定以“\0”为字符串的结束标志。
一、字符串的定义和初始化
char url[15]={'w','w','w','.','w','i','n','f','i','m','.','n','e','t','\0'};
char url[15]={""};
定义的同时进行初始化,则可以不指定其大小,如:
char url[]={""};
使用写符数组的方式进行初始化时,需加上‘\0’结束符。

二、字符串的处理
1.用printf函数和scanf函数处理时,其参数为字符数组名,而非字符元素名。
char url[20];
scanf("%s",url);
printf("%s",url);
用printf以“%s”格式输出字符串时,遇到“\0”就自动停止,且输出的字符中不包含“\0”。
用scanf以“%s”格式输入字符串时,当用户回车后,系统会自动在末尾处加上一个“\0”,例如:
char url[20];
scanf("%s",url;
当用入输出后,其内存存储方式为:
|w|w|w|.|w|i|n|f|i|r|m|.|n|e|t|\0|
上面已经提到,能数为字符数组名,而无需再加上取地址符(&)。

2.用C语言库函数中提供的字符串处理函数。
(1)puts(char *str);//char str={""};puts(str);
(2)gets();//get(str);
(3)char *strcat(char *dest,const char *src);//将参数src字符串复制到参数dest所指的字符串尾,前提是参数dest要有足够的空间来容纳要复制的字符串。
(4)char *strcpy(char *dest,const char *src);//将参数src字符串复制至参数dest所指的字符串中。
char *strncpy(char *dest,const char *src,size_t n);将参数src字符串前n个字符复制至参数dest所指的字符串中。
(5)int strcmp(const char *s1,const char *s2);//比较参数s1和参数s2字符串,C言语中是不能用if(s1>s2)这样的方式来比较字符串大小的。参数s1和s2所有字符相同则返回0;参数s1大于参数s2则返回正值;参数s1小于参数s2则返回负值。
(6)size_t strlen(const char *str);//用于计算指定字符串str的长度,不包含结束符“\0”。
在Linux下使用fget函数时,通常会有警告“the "gets" function is dangerous and should not be used”出现,提示我们在Linux下慎用gets函数,而推荐使用fgets函数,最好不要使用gets,因为它不检测读回来的数据长度是否超过自己所拥有的buff的长度,所以有可能会造成溢出。所以它的使用会造成程序的潜在隐患,会使程序不安全,可以是用fgets()来代替它。另外gets从终端读入是的字符串是用\0结束的,而fgets是以\n结束的,在用strcmp函数进行字符串比较时要犹为注意。
阅读(6181) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~