C风格字符串(C—style character string)
来源:互联网 发布:怎么设计淘宝首页 编辑:程序博客网 时间:2024/05/05 18:37
C风格字符串,就是以空字符null结束的字符数组。
我们通常通过(const)char *类型的指针来操纵C风格字符串。
C风格字符串的标准库函数:#include <string.h>即可。C++中还可用 #include <cstring>。
有关C风格字符串的函数:
在string.h中包含的关于字符串操作的库函数中,通常都有类型为cosnt char * p的参数,这种参数的意义是:要求传递一个字符指针,而且在函数的实现中不通过该字符指针改变其所指向的字符的值。实际上加上const起到了保护作用,当在函数体中视图通过*p来修改p指向的字符值时,编译出错。但是,我们知道,strcpy等函数是库函数,是早就定义好的正确的函数,它当然不会在自己的函数体中修改*p,那么加上const有什么意义呢?
实际上,在函数参数前加上const只是提醒程序员,我这个函数(函数体内)不会修改*p,你最好传递这样一个实参p来,p所指向的字符为const类型,当然,如果你非要传递这样一个实参:p所指向的字符为普通的非const类型,也不违法。
但是,绝大多数与字符串处理有关的函数中,都要求传递给cosnt char *类型的指针指向的是一个以NULL结束的字符串(字符数组)(的首元素)。
因为这些函数的执行过程是:从实参指向的字符开始,一直向后搜索,直到遇到nul字符结束。如果传递一个非NULL结尾的指针(比如一个非NULL结束的字符数组名,或一个字符指针变量(相当于指向只有一个元素的字符数组)),那么函数执行到数组的最后一个元素后,由于没有遇到NULL,会越界执行,直到遇到内存中某处null结束符为止。越界后,内存中的存储内容将无法预料,程序的执行结果也将无法预料。
除了cosnt char *类型的参数,还有char *类型的参数。
例如:char *strcpy( char *strDestination, const char *strSource);MSDN中对参数strDestination的解释为Destination string(目标字符串),没有要求Null-terminated,因此,我们可以定义一个字符数组 char str[80]
#include <string.h>#include <stdio.h>void main( void ){ char string[80]; strcpy( string, "Hello world from " ); strcat( string, "strcpy " ); strcat( string, "and " ); strcat( string, "strcat!" ); printf( "String = %s\n", string );}
字符数组未初始化,其中各元素的值都是无法预料的。但是strcpy将字符串“Hello world from”的值复制到数组中后,数组中前面几个元素的值为Hello world from \0,后面的元素仍是无法预料的。
而在strcat中,
char *strcat( char *strDestination, const char *strSource);
参数strDestination的类型为char *,但其在MSDN中的解释为Null-terminated destination string。
总结:(1)当参数类型要求为cosnt char *,并且要求为NULL-terminated(通常都会如此要求)时,传递一个字符指针,该指针指向一个null结束的字符数组。(一般用一个字符数组名或字符串常量).
(2)当参数类型要求为char *时,看看有没有要求NULL-terminated.或者从实际情况考虑,该参数到底该如何传递。如果没有NULL_terminated的要求,而且是用来接收字符串的,定义一个足够大的字符数组,并把数组名传递给它就可以了,否则如(1)所述传递指针。
- C风格字符串(C-style character string)
- C风格字符串(C—style character string)
- C风格字符串&string类型
- c 风格字符串和string
- c风格字符串与c++string比较
- C++:关于string转C-风格字符串
- std::string 和 c风格字符串
- C++ C 风格字符串与string类
- C风格字符串[C++]
- C风格字符串和C++string类对比 使用实例
- C风格字符串和C++string对象的相互转化
- c风格字符串与c++string的比较
- C风格字符串和C++string对象的相互转化
- C 风格(C-style)强制转型
- C 风格(C-style)强制转型
- C style字符串
- C style字符串
- C style字符串
- 项目中多线程的使用
- java虚拟机常用命令工具
- Android 利用ViewPager、Fragment、PagerTabStrip实现多页面滑动效果
- 借鉴的学习计划
- hdu1405
- C风格字符串(C—style character string)
- PHP_带smtp验证的发邮件函数
- C#中char数组转化为string
- FPGA开发之--Verilog中的位移指令
- android系统服务 adbd服务的开启
- CentOS5.5中文乱码以及中文输入法问题
- jQuery练习
- 归并排序对链表操作
- glOrtho