【C基础】空字符'\0'与字符串
来源:互联网 发布:windows xpphotoshop 编辑:程序博客网 时间:2024/05/17 01:58
空字符'\0'
空字符即NUL字节,是一个ASCII值为0的控制字符,在程序代码中通常以转义序列'\0'表示,在C语言中,空字符非常重要,主要体现在字符串中。
字符串
字符串就是一串零个或多个字符,并且以位模式为全0的NUL字节即空字符('\0')结尾。C语言中字符串没有显示的数据类型,字符串通常存储在字符数组或动态分配的内存中,在编码操作中通常将整个字符串作为操作对象,常用操作包括复制、查找、比较等。
空字符与字符串
1、空字符是字符串的终止符。注:空字符本身不是字符串的一部分,所以字符串的长度并不包含空字符;
2、操作字符串时,必须保证字符串以空字符结尾(注:不以空字符结尾的字符序列,不是字符串)。
如果在一个需要字符串的地方(例如strlen函数的参数)使用了一个不是以空字符结尾的字符序列,会造成什么结果呢?
a、strlen函数将无法知道空字符是没有的,所以它将继续进行查找,一个接一个字符查找直到发现一个空字符为止,或许它找几百个字符才找到,而此时strlen函数的这个返回值从本质上说是一个随机数或者说并没有实际意义;
b、如果字符串操作函数试图访问了系统分配给这个程序以外的内存范围,程序会崩溃(通常表现为段溢出,程序异常退出)。
潜在不以空字符结尾的字符序列操作总结:
a、char *strcpy(char *dst, char const *src) 假如源字符串src比目标字符数组dst长,多余的字符仍将被复制,它们将覆盖原先存储于目标字符数组dst后面的内存空间的值(程序存在崩溃可能也会影响其他存储值),最后目标字符数组dst固然是不以空字符结尾的字符序列,所以必须保证目标字符数组dst的空间能足以容纳源字符串src;
b、char *strncpy(char *dst, chat const *src, size_t len) 同上,首先必须保证目标字符数组dst的空间能足以容纳len个字符,除此之外,如果strlen(src)的值大于或等于len,那么只有len个字符被复制到dst中,但dst最终将不会以空字符结尾;
c、char *strcat(char *dst, char const *src) 假如源字符串src比目标字符数组dst剩余的空间长,多余的字符仍将被复制,它们将覆盖原先存储于目标字符数组dst后面的内存空间的值(程序存在崩溃可能也会影响其他存储值),最后目标字符数组dst固然是不以空字符结尾的字符序列,所以必须保证目标字符数组dst剩余的空间能足以容纳源字符串src;
d、char *strncat(char *dst, char const *src, size_t len) 同上,首先必须保证目标字符数组dst剩余的空间足以容纳len个字符,除此之外,如果strlen(src)的值大于或等于len,那么会有len个字符被复制到dst结尾处,但假如dst原有剩余空间刚好可以容纳len个字符,dst最终将不会以空字符结尾;
e、int strcmp(char const *s1, char const *s2) strcmp函数的参数必须都以一个空字符结尾,如果并非如此,strcmp就可能对参数后面的字节进行比较,这个比较结果将不会有实际意义,同理strncmp也一样。
测试代码:
#include <stdio.h>#include <string.h>int main(){int len;char str[5];strcpy(str, "12345678"); /*字符串拷贝*/len =strlen(str); /*字符串长度*/printf("str_len:%d\n", strlen(str)); /*打印目标字符串长度*/printf("str:%s\n", str); /*打印目标字符串*/ return 0;}
测试分析:
测试代码中,函数strcpy将大于目标字符数组str存储空间长度的字符串拷贝给str(实际操作中会对其他存储值进行覆盖,危险操作,在作者的测试环境中未引发程序崩溃不代表在实际的开发环境中不会引起程序崩溃),目标字符串str最多存储5个字符,字符打印时结果为str:12345也证明如此,但字符串长度却实际输出为6,长度6根本没有实际意义,在其他测试环境中可能为大于5的任意值(如7、8等)。
- 【C基础】空字符'\0'与字符串
- c字符处理之空字符、null与0
- 空字符与空格字符、NULL、空字符串
- C 去除 字符串两边的空字符
- c字符与字符串
- Java字符与字符串(基础)
- C字符数组与字符串
- C语言基础 字符串总是以\0字符结束
- C语言中空白字符与空字符的区别
- C语言中空格,空字符,字符数组结束符,NULL,空字符串的区别
- C语言版Trim()函数,去除字符串中的空字符
- c语言,删除重复的字符串和空字符
- c编程:输入一个字符串,求出字符串的最后一个字符,如果是空字符串则返回空字符。
- 【c基础】字符串、字符和字节
- C语言中基础的字符与字符串的输入与输出
- C语言中的空字符'\0'
- c空字符
- C/C++拾遗————空指针{NULL/0/(void*)0}与 空字符{null/'0'} 区别
- JPA--联合主键
- iOS设计模式的学习记录 (2) --- 原型模式
- 影响收录的影响有哪些?
- 面向Stage3D开发者的强大工具——Intel GPA
- 【LFS之步步为营】【二】
- 【C基础】空字符'\0'与字符串
- 用数组代替if-else和switch-case语句
- CSS学习笔记
- 块设备读写流程
- 2014hulu笔试题
- HTTP中GET与POST的区别
- 压缩空间技术 稀疏数据结构
- OpenCV4Android开发之旅(三)----Windows平台Eclipse、MinGW配置OpenCV2.4.4(C++接口调用) 全过程(附:MinGW编译OpenCV2.4.4)
- 项目开发随心记