C++字符串(C类型)存储有无结束标志


一.假如现要存储数据“abc”

分为两种方式:有带0结束标志的,无带0结束标志的。

1.有结束标志的定义方法。

Char* ch = “abc”;// strlen(ch) = 3;size = 4;(结束标志)

Charch[] = “abc”;// strlen(ch) = 3;sizeof(ch) /sizeof(char) = 4;

其它还可以以显示的方法加0结束标志。

这两种方式相似,均以0标志字符串结束。所以它们都能用C里的一系列字符串处理函数,如:strcmp(); strcpy()[注意:传递的第一个参数不能是第一种数据类型]; strlen()等。但它们的实际类型有很大区别。第一种的实际类型为const char*,所以不能用下标操作修改某个元素的值,这就说明了strcpy()的运用,但可以整体修改(ch = “aaaa”),因为指针不是常量,它只是一个指向常量的指针(此问题见const运用)。而第二种是一个字符数组[注意与char ch[] = { ‘a’, ‘b’, ‘c’ }的区别]

2.无结束标志的定义方法。

Char ch[] = { ‘a’, ‘b’, ‘c’ };//sizeof(ch)/sizeof(char) = 3;

//strlen(ch) = ?错误方法,无0结束符。除非为:char ch[] = {‘a’,’b’,’c’,0}

Char* ch = new char[3];ch[0] = ‘a’; ch[1] = ‘b’; ch[2] = ‘c’;//strlen(ch) = ?// size = 3;

String ch = “abc”;// C++提供的string类。//ch.size() = 3;

在这几种方法中,C里的一系列字符串处理函数就没用了,因为它们要以有0结束符为前提条件。但在使用时可以人为的增加结束符,数组空间增加一个,并在最后一个值改为0来达到结束的条件,但这样用很不是方便。String类型可以调用相应的函数转化为C类型的字符串(ch.c_str())String类提供的一系列成员方法明显比C类型字符串处理更好,且不易出错。

3.运用以上的方法可以分析一下面这个定义具体细节。

Char* ch[] = { ‘b’, ‘c’, ‘d’ };

Char* ch[] = { “bbb”, “aaa”, “ccc” };

(1).是否在确。

(2).sizeof(ch); sizeof(ch[1]); strlen(ch); strlen(ch[1]);

(3).ch[1] = “fff”; ch[1][0] = ‘f’;是否可行。

(4).假如要复制此内容到另一个存储空间,怎样完成。

解:(1).第一个错误,第二个正确。因为第一个是一个数组,且成员为指向字符串的指针,而初始化的数据为字符,可以改为:char* ch[] = { “b”, “c”, “d” };下面的题以第二个正确的为前提。

(2).sizeof(ch) = 12;sizeof(ch)/sizeof(char*) = 3;

sizeof(ch[1]) = 4;//指针的长度

strlen(ch) = ?;//数组无0结束标志。可以多加一个:char* ch[] = {“bbb”, “aaa”,”ccc”,0};

strlen(ch[1]) = 3;//单个数据为char*,0结束符,可以计算。

(3).ch[1] = “fff”;正确,因为它不是常量指针,只是指向常量的指针。

ch[1][0] = ‘f’;错误,修改常量。

(4).intsize =sizeof(ch)/sizeof(char*);

char* chh =newchar[size];

for(inti = 0; i < size; ++i)

{

char* c =newchar[strlen(ch[i]) + 1];

strcpy(c, ch[i]);

chh[i] = c;

}
原文链接: https://www.cnblogs.com/zqrferrari/archive/2011/02/22/1961080.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/21339

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月7日 下午11:21
下一篇 2023年2月7日 下午11:22

相关推荐