热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

1、字符串C语言没有字符串数据类型,因为字符串以字符串常量的形式出现或存储于字符数组中.字符串常量和适用于那些程序不会对他们进行修改的字符串.所有其他字符串都必须存储于字符串数组或

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条件为真,并且顺利复制,数组将包含以下的内容:
技术分享图片


推荐阅读
  • iOS snow animation
    CTSnowAnimationView.hCTMyCtripCreatedbyalexon1614.Copyright©2016年ctrip.Allrightsreserved.# ... [详细]
  • 线段树,注 ... [详细]
  • 阿里云 Aliplayer高级功能介绍(八):安全播放
    如何保障视频内容的安全,不被盗链、非法下载和传播,阿里云视频点播已经有一套完善的机 ... [详细]
  • JavaSE For循环入门示例
    本文将介绍Java中For循环的基本概念和使用方法,通过几个简单的示例帮助初学者更好地理解和掌握For循环。 ... [详细]
  • 本文介绍了一种使用CSS3和jQuery实现的35款SVG图标加载动画。这些动画不仅视觉效果出色,还能提升用户体验。通过本文,您可以了解如何在项目中应用这些动画。 ... [详细]
  • 本文介绍了如何在 Qt 应用程序中实现状态栏、浮动窗口(铆接部件)和中心部件。通过简单的代码示例,详细解释了每个组件的创建和设置方法。 ... [详细]
  • 本文介绍了如何使用Postman构建和发送HTTP请求,包括四个主要部分:方法(Method)、URL、头部(Headers)和主体(Body)。特别强调了Body部分的重要性,并详细说明了不同类型的请求体。 ... [详细]
  • 本文介绍了 Confluence 6 中使用的其他 Cookie,这些 Cookie 主要用于存储产品的基本持久性和用户偏好设置,以提升用户体验。 ... [详细]
  • Bootstrap 插件使用指南
    本文详细介绍了如何在 Web 前端开发中使用 Bootstrap 插件,包括自动触发插件的方法、插件的引用方式以及具体的实例。 ... [详细]
  • 如何解决TS1219:实验性装饰器功能可能在未来版本中更改的问题
    本文介绍了两种方法来解决TS1219错误:通过VSCode设置启用实验性装饰器,或在项目根目录下创建配置文件(jsconfig.json或tsconfig.json)。 ... [详细]
  • 第七卷《英才》强调,即使有良药,若不对症,效果也不如低等药物;即使有贤才,若不适用,效果也不如普通人。文中通过多个比喻,阐述了人才使用的重要性,指出合适的人才在适当的时间和场合才能发挥最大效用。 ... [详细]
  • packagecom.panchan.tsmese.utils;importjava.lang.reflect.ParameterizedType;importjava.lang. ... [详细]
  • 本文详细介绍了 Java 网站开发的相关资源和步骤,包括常用网站、开发环境和框架选择。 ... [详细]
  • 蒜头君的倒水问题(矩阵快速幂优化)
    蒜头君将两杯热水分别倒入两个杯子中,每杯水的初始量分别为a毫升和b毫升。为了使水冷却,蒜头君采用了一种特殊的方式,即每次将第一杯中的x%的水倒入第二杯,同时将第二杯中的y%的水倒入第一杯。这种操作会重复进行k次,最终求出两杯水中各自的水量。 ... [详细]
  • 经过一年的思考,我发现自己对开发的兴趣并不浓厚,而对算法研究则更加热衷。本文将探讨开发与算法之间的本质差异,并分享我的未来学习计划。 ... [详细]
author-avatar
欢颜是胖妞妞08
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有