C C语言中Char字符串的问题汇总


有些题目在定义函数的时候采用的是char指针或者字符串传参,自己习惯STL的string,不太熟悉。所以这里对C语言中的Char数组做个总结;

 

关于Char字符串的初步概述:

相当于Int数组,只不过是char类型的。

但是需要注意的是Char数组在定义的时候一定要注意,结尾的'\0'是占一个位置的,如果忽略该字符,会导致异常的错误;

 

每一个char[]都以终结字符作为结尾,注意一下;

 

关于Char数组的长度问题:

注意关于sizeof和strlen的问题,两者的计量标准不同;

1.对于strlen来说,计量标准为字符串数组中的非终结符字符个数;

2.对于sizeof来说,计量标准为字符串中的所有位数,包含非终结符号;

对于相同的字符串char[]="12345";

strlen的结果为5;

sizeof的结果为6;

所以一般来说统计实际字符个数用strlen,而一般开辟赋值使用sizeof;

 

关于Char* 和 Char[] 的数组问题:

首先,对于C语言来说,char*是一种比较特殊的存在。

在之前OJ的题目中,有一道题有这样一个坑:

 

之前遇到这个问题,发现char* 传进去并不能改变实参,本质上的问题在于没有理解char*指针是个什么东西; 

 

char[]本质上就是一个连续的区域,内部存储char元素;

一般的赋值语句:

char str[]="123124124";

str通常可以表示为一个指针,也就是char*,这个指针指向连续的数组区域;

例如str[0]的地址为0x001;

则char*表示的是一个单元内的内容,是0x001,也就是装着首字符的地址;

在通常情况下,char[]数组可以直接用char*来进行表示;

 

其次,重要的是访问问题;

尽管当str作为char*指针存在,但是由于字符串数组的特殊性质,可以直接对其进行下标访问,而不用使用指针的解引用访问;

但是一定要注意范围,因为如果不知道范围,有可能越界。

这个玩意不像C++的string,越界会报错;

 

 

因此对于该题目中,如果按照形参不传引用而是直接拷贝,则代表两个指针同时指向原来的char数组的首个元素;

所以对于自己起初的错误写法,针对于函数内部有:

c=(char*)molloc(sizeof(s)+1);

则改变的是c指向的空间,也就是重新开辟了一个数组,和之前的实参指针半点关系都没用,函数结束就自动销毁;

 

所以如果理解指针的特性,直接采用对指针指向的区域进行改造:

 

 则直接就会把传进来的字符串进行改造,使得不用传引用就可以进行修改;

 

关于char数组的赋值问题:

关于赋值问题也要注意一下;

通常来说char数组赋初值有以下几个方式:

1.直接指定:

 

 2.开辟空间:

这一般是进行重新赋值的时候;

c = (char*)malloc(sizeof(s) + 1);

之后再利用strlen进行填补也可以;

当然也可以利用strcpy,但是注意,空间一定要开的足够大,并且赋值的时候,编译器会默认在结尾加上'\0';

利用该函数也可以对其进行string STL库赋值,只不过要用string.c_str()函数;

 

注意:关于截断功能;

对于一个字符串,如果想从中间截短,直接在其中一位赋值'\0',即可截断;

个人觉得应该是在统计字符个数和输出时候,都以'\0'来作为结尾的;

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM