2012-01-20 57 views
2

我见过的教程是使用字符数组来演​​示一个字符串对象。例如thees教程:C++为什么在教程中使用有关字符串的字符数组?

http://www.cplusplus.com/reference/string/string/copy/

http://www.cplusplus.com/reference/clibrary/cstdlib/atoi/

我看到没有使用字符数组,以证明某事的教程。在学校,老师也不使用任何阵列。对于我来说,在阅读本教程时首先使用数组有点困惑(知道我仍然是C++的初学者)。

我只是想知道为什么有教程使用char数组来显示一个或多个字符串对象可以做的事情。

回答

6

在字符数组中存储字符串是用C语言表示字符串的原始方式。在C中,一个字符串是一个char类型的数组。数组的大小是字符数+ 1。+1是因为C中的每个字符串都必须以字符值0结尾。这是NULL终止符或终止符。

C风格的字符串在C++中是合法的,因为C++旨在向后兼容C.另外,许多库和现有代码库都依赖于C风格的字符串。

这是一个关于C风格字符串的教程。 http://www.cprogramming.com/tutorial/c/lesson9.html

参考:要将C++字符串转换为C风格字符串,请调用方法c_str()。

+2

此外,许多人不知道C和C++之间的区别,并且您在网上找到的大多数教学信息都是错误的。 –

2

在C和C++中,字符串被异常地表示为'\0'终止数组char。使用C++,您可以使用标准类string,但在表示字符串时,这绝不是“自然”的事情。许多C和C++程序仍然使用一组数字char

+0

我并不感到惊讶。事实上,我怀疑这个原因。 – AlexSavAlexandrov

+2

'std :: string'是一种更自然的方式来做到这一点,并且没有人满足于null结尾的字符串 - 他们根本无法承担重写他们的程序来摆脱它。 – Puppy

+0

@DeadMG:我的意见是你的意见。许多需要处理“字符串”并用c/C++编写的应用程序不需要std :: string的开销。而且还有程序员,特别是与微控制器一起工作的开发人员,他们仍然使用char数组,并且不会抱怨。 – Mithrandir

0

STL出现时出现了字符串,当我记得的时候,C++标准在90年代的某个地方形成了。在那之前(例如我的学校仍然使用的Turbo C++ ......不幸的是),C++中没有'string'对象,所以每个人都使用char数组。它们仍然被广泛使用,因为字符串并没有真正引入许多字符数组无法做到的新事物,并且许多人不喜欢它们。字符串实际上是空字符结构数组,但它们隐藏在类后面。

字符串的一个问题是并不是所有的库函数都支持它们。例如,printf系列函数atoi(它来自'ascii to integer',也包含atof和所有其他文件),但它们不支持字符串。另外,在大型项目中,有时需要使用C语言,并且C中不存在字符串,只能使用char数组。

关于字符串的好处是,它们的实现方式非常容易将字符串转换为字符数组。

+0

[std :: string是STL的一部分吗?](http://stackoverflow.com/questions/5972546/is-stdstring-part-of-the-stl)可能是一个有趣的读取。我相信你的意思是stdlib,或者标准库,它不是* STL。 – Xeo

+1

字符串引入了几个“char”阵列无法实现的性能,安全性和封装。哦,我忘了是否是通用的?所有'atoi'函数都有C++等价物。 – Puppy

+0

那么,它仍然使用容器,所以它取决于STL ...足够接近。这是一个非常有争议的事实。 – Tibi

1

看到了Bjarne Stroustrup的论文“学习标准C++当作一门新语言” www2.research.att.com/~bs/new_learning.pdf

+0

我想这个答案意味着在本书中有一个算法可以解释我的问题。对? – AlexSavAlexandrov

+0

这不是一本书,它是一篇论文(只有11页)。 Bjarne是C++的创造者。 在本文中,Bjarne解释了如何使用C++作为一种新语言,而不是以C++方式编程。 我不知道如果回答你的问题,但可以引导你在C++中的最佳编程实践,避免C容易出错的结构。 –

相关问题