首页 > 其他 > 详细

C和C指针小记(十四)-字符串、字符和字节

时间:2019-02-22 17:17:26      阅读:154      评论:0      收藏:0      [点我收藏+]

1、字符串

C语言没有字符串数据类型,因为字符串以字符串常量的形式出现或存储于字符数组中.
字符串常量和适用于那些程序不会对他们进行修改的字符串.
所有其他字符串都必须存储于字符串数组或动态分配的内存中.
字符串是一个或多个字符,并且以一个位模式全0 的NUL字节结尾
头文件 string.h 包含了使用字符串函数所需的原型和声明.

2、字符串长度

用库函数 strlen 计算字符串长度
size_t strlen(char const *string);
size_t 是一个无符号整型,在stddef.h中定义.
警告:

if( strlen( x ) >= strlen( y ) ) //1
if( strlen( x ) - strlen( y ) >= 0)//2

第一条语句可以正常工作
第二天语句永远是真. 因为strlen的结果是个无符号数,所以操作符 >= 左边的表达式也将是无符号数,而无符号数绝对不可能是负的.
把strlen的返回值强制转换为int可以消除这个问题,但是不推荐.

//计算字符串参数的长度
size_t strlen (char const *string){
    int length;
    for( length = 0; *string++ != ‘\0‘;)
        length += 1;
    return length;
}

3、不受限制的字符串函数

最常用的字符串函数都是“不受限制”的,就是说他们值是通过寻找字符串参数结尾的NUL字节来判断它的长度.
这些函数一般都指定一块内存用于存放结果字符串.在使用这些函数时,程序员必须保证结果字符串不会溢出这块内存.

3.1 复制字符串

char strcpy(char det, char const *src);
这个函数把参数src字符串复制到dst参数.如果参数src和dst在内存中出现重叠(也就是两者相同),其结果是为定义的.
由于dst参数将进行修改,所以它必须是个字符数组或者一个指向动态分配内存的数组指针,不能使用字符串常量.
目标参数的之前的内容将被覆盖并丢失.即使新的字符串比dst原先的内存更短,由于新字符串是以NUL字节结尾,所以老字符串最后剩余的几个字符也会被有效地删除
例子:
char message[] = "Original message";
...
if(...)
strcpy(message, "Different" );
如果if条件为真,并且顺利复制,数组将包含以下的内容:
技术分享图片

C和C指针小记(十四)-字符串、字符和字节

原文:https://www.cnblogs.com/wjw-blog/p/10419465.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!