Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;为什么在关于字符串的教程中使用字符数组?_C++_String_Char - Fatal编程技术网

C++ c++;为什么在关于字符串的教程中使用字符数组?

C++ c++;为什么在关于字符串的教程中使用字符数组?,c++,string,char,C++,String,Char,我看过一些教程,它们使用字符数组来演示字符串对象。例如,TEES教程: 我看过一些教程,这些教程没有使用字符数组来演示一些东西。在学校,老师也不使用任何数组。对我来说,当我阅读教程时(知道我还是C++的初学者),一开始使用数组有点混乱 我很好奇为什么有教程使用char数组来显示字符串对象可以做的一个或多个事情。在C和C++字符串中 是/异常地被表示为 0 \ < /COD>终止的数组>代码> char < /C>。使用C++,你可以使用标准类字符串< /> >,但是在表示字符串时,这绝对不是

我看过一些教程,它们使用字符数组来演示字符串对象。例如,TEES教程:

我看过一些教程,这些教程没有使用字符数组来演示一些东西。在学校,老师也不使用任何数组。对我来说,当我阅读教程时(知道我还是C++的初学者),一开始使用数组有点混乱


<>我很好奇为什么有教程使用char数组来显示字符串对象可以做的一个或多个事情。在C和C++字符串中

是/异常地被表示为<代码> 0 \ < /COD>终止的数组>代码> char < /C>。使用C++,你可以使用标准类<代码>字符串< /> >,但是在表示字符串时,这绝对不是一个“自然”的事情。许多C和C++程序仍然使用“<代码> char < /代码>”的数组非常内容。 在字符数组中存储字符串是C语言中表示字符串的原始方法。在C语言中,字符串是char类型的数组。数组的大小为字符数+1。+1是因为C中的每个字符串都必须以字符值0结尾。这是空终止符,或者只是终止符

字符串样式在C++中是合法的,因为C++的目的是与C.向后兼容,许多库和现有代码库依赖于C风格字符串。 下面是关于C样式字符串的教程


FY:将C++字符串转换为C样式字符串,调用方法CyString()。P> > P>弦出现,STL出现,90年代某个地方形成C++标准,如果我记得很清楚。直到那时(例如Turbo C++在我学校中仍然使用……不幸),在C++中没有“string”对象,所以每个人都使用char数组。它们仍然被广泛使用,因为字符串并没有真正引入许多char数组无法实现的新功能,而且许多人不喜欢它们。字符串实际上是以null结尾的字符数组,但它们将其隐藏在类后面

字符串的一个问题是并非所有库函数都支持它们。例如,printf函数族atoi(来自“ascii to integer”,还有atof和所有其他函数)不支持字符串。此外,在大型项目中,有时需要使用C语言,而C语言中不存在字符串,只有字符数组


<> P>字符串的优点是它们是用一种很容易从字符数组转换成字符数组的方式实现的。

< P>参见Bjarne Stroustrup的论文“学习标准C++作为一种新语言”
www2.research.att.com/~bs/new_learning.pdf

我并不惊讶。事实上,我怀疑这个原因。
std::string
是一种更自然的方法,没有人满足于以空结尾的字符串-他们根本无法重新编写程序来摆脱它。@DeadMG:这是我的观点。许多需要处理“字符串”并用c/c++编写的应用程序不需要std::string的开销。还有一些程序员,特别是使用微控制器的开发人员,他们仍然使用字符数组,并且不会对此抱怨。@Mithrandir哪种开销?至少自从
move
以来,字符串的大多数性能问题都已成为过去(甚至在此之前,它也没有多大关系),与以空结尾的字符数组相比,字符串有几个明显的优势。我严重怀疑这些声称的性能优势即使存在于任何现实世界的程序中也无法衡量。@Mithrandir:std::string没有显著的开销。微控制器的开发人员只是整个开发人员的一小部分,“不要抱怨”“使用
std::string
”不会更好,事实上,未能服务于一个非常特定的利基并不意味着它不能服务于它的一般用途。对你来说可能是一本有趣的书。我相信你指的是stdlib或标准库,它不是STL。字符串引入了
char
array无法实现的一些功能—性能、安全性和封装。哦,我忘了是通用的吗?所有的<代码> ATOI 函数都有C++等价物,它仍然使用容器,所以它依赖于STL…够近了。这是一个很有争议的事实。你说“它使用容器”是什么意思?看看这里:。String实际上是basic_String的typedef。如果您查看“Where defined”列,它在Container和Sequence中定义了成员。它甚至可以是基于序列的派生类,但是我还没有看到源代码。而且,很多人不知道C和C++之间的区别,并且大多数你在网上找到的教学信息是错误的。我猜这个答案意味着有一个在这本书中解释的算法,回答了我的问题。是吗?它不是一本书,它是一篇论文(只有11页)。Bjarne是C++的创建者。在本文中,Bjarne解释了如何将C++作为一种新的语言,而不是C++编程中C语言的扩展。我不知道是否回答了你的问题,但可以指导你在C++中进行最佳编程实践,避免C容易出错的结构。