有关c风格字符串的一些问题还有一些附加的,呵呵
编译器vc++.net
char *s = new char[5];
这样声明一个字符串,用strlen,就是24个长度呢
char *s = new char[4];
这样就变成了16个长度
为什么这么大差距呢
好像听说c风格字符串是一个封装完好的一个结构体,是这样么?
如果这样定义和
char * s ="hello";
不算一种东西?应该是吧,上一个只是动态分配而已么,具体区别有多少
s应该只算一个指针而已
c风格字符串是不是都默认算作常量?
还有一个问题,垃圾收集器是不是能减少内存泄漏的情况,这个时候delete操作是否非常必要。
本人自学c++,很多问题不解
现在还对函数指针和函数对象抱有疑虑……
&s 这样的操作之后,显示的地址和中断之后的变量地址不符合
是不是表示c风格字符串能算是一种指针数组,它指向常量区?所以不能直接修改?
还有
cstring.h
里面有些函数编译错误呢……
好像里面函数都用汇编写的……
汗……
觉得我以后还是用
c++的string比较好么?
主要是这次是做一道题,我觉得用char*比较好……所以才弄了一下,结果发现很多问题
问题点数:20、回复次数:5Top
1 楼huang1204(湘西土匪)回复于 2006-06-01 21:19:01 得分 0
楼主找本C++基础书 先看看Top
2 楼wanfustudio(雁南飞:知识之败,慕虚名而不务潜修也)回复于 2006-06-01 21:25:03 得分 0
搂住打字速度肯定比我快:)Top
3 楼rollor_phoe(柔枫)回复于 2006-06-01 22:48:24 得分 0
楼主问的问题挺深刻的,我得好好去研究一下了。Top
4 楼ywhbn(天涯)回复于 2006-06-02 09:30:09 得分 0
char *p p就是一个指向字符类型的指针。
字符串是常量啊,要不然干嘛叫字符串常量。c风格字符串其实就是'\0'结尾的字符序列Top
5 楼sarh2os()回复于 2006-06-02 11:34:28 得分 20
char *s = new char[5];
这样声明一个字符串,用strlen,就是24个长度呢
........................................................
搂主还是没有理解什么是字符串啊!字符串和字符数组的区别是什么?就是后者的最后一个字符时'\0'。也就是说字符串“abc”实际上包含四个字符:'a','b','c','\0'。
char *s = new char[5];
这句话是什么意思?这是说你创建了一个含有5个字符的字符型数组。它的最末一位如果不是'\0'的话它就不能称得上是一个字符串!
LZ还犯了一个错误就是不理解strlen()的用法。strlen()函数是用来获得字符串长度的函数。也就是说它只能用来测量以'\0'字符结束的字符串。它的返回值是'\0'之前所有字符的个数。如果没有'\0'是肯定得不到正确的值得!而你传给它的指针是指向以'\0’结束的字符串么?答案应该是不一定。因为你new出来的这个字符数组,在你没对其中元素进行初始化的时候,他们的值是随机的。也就是说它有可能是以'\0'结束的。总之,你不能用strlen()去测量一个字符数组的长度。
明白了什么是字符串?以及strlen的用法。你的问题就迎刃而解了。
但是从你描述的问题上看,你对C++学习的太少了。好好看看《C++ primer》再来问问题吧:)
Top




