Chinaunix首页 | 论坛 | 博客
  • 博客访问: 230873
  • 博文数量: 108
  • 博客积分: 3092
  • 博客等级: 中校
  • 技术积分: 1172
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-25 16:35
文章分类

全部博文(108)

文章存档

2011年(3)

2010年(43)

2009年(19)

2008年(43)

我的朋友

分类: C/C++

2008-12-23 23:32:20

字符串,字符和字节
 
1.c语言没有显式的字符串数据类型,字符串常量适用于程序不会对其进行修改的字符串(char *str),所有其他字符串都必须存储于字符数组或动态分配的内存中。
 
2.有效的字符串必须是以NUL字节结尾的(‘\0’),否则在用标准库的文件处理时就会出现一些不可预见的情况。标准库函数的原型处于string.h中。
 
3.strlen返回的无符号数,所以用它的返回值比较大小时要注意
if(strlen(x)-strlen(y)>0)
这个结论是永远成立的,因为无符号数的运算结果永远不会小于0
 
4.在进行strcpy或者strcat操作时,应保证目标字符数组的空间足以容纳要复制的字符串,否则多余的字符将会覆盖数组后面内存空间的值,导致情况的发生。当使用有len限制的strcpy或者strcat函数时,对于前者,如果源串的长度比len大,那么结果仍然不会以nul字节结尾,而后者则总是在结果字符串后面添加一个NUL字符。
 
5.内存操作
memcpy //复制
memmove //可重叠的复制
memcmp //两段内存内容的比较,以字节为单位
menchr //在内存中查找字符第一次出现的位置
memset //将内存中指定的一段长度都设置为某个字节的值
 
mem***函数提供了类似字符串函数的能力,但是它们可以处理包括NUL字节在内的任意字节。
memmove与memcpy的不同是,它的操作不是直接的复制,而是现将源复制到一个临时的位置,然后再将临时位置的内容复制到目标位置,这样就可以进行重叠的复制操作,比如memmove(x,x+1,...)
 
阅读(681) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~