2010-06-01 57 views
3

我把C++,因为我只是在C#中开始,我不知道是否有差异。未填充数组(C++)中的最后一项是什么?

如果你声明数组

,并通过改编价值观填写ARR [0] [8],什么样的价值将被放置在ARR [9]?

a space''?终结线'\ n'? '\ 0'?或者它什么都没有?

我问这个,因为我一直使用的战术是这样

char word[20]; 
for(count = 0 ; count < 20 ; count++) 
{ 
    cout << word[count]; 
} 

打印数组的全部内容,而且,我在想​​,如果我可以把它简化 (例如,如果最后入口是“\ 0”)通过使用这样的

char word[20]; 
while(word[count] != '\0') 
{ 
    cout << word[count]; 
} 

的东西,这样,我就不必记住许多数据是如何进入到一个数组,如果所有的空间都没有填满。

如果您知道更快的方式,请告诉我。我倾向于在数组上犯一堆错误。

+3

“我把C++放在C++中,因为我刚刚开始使用C#,我不确定是否有区别。”这是个很大的差异。 – 2010-06-01 22:47:54

+2

我认为@Mark严重低估了巨大的单词。它应该是大胆的,眨眼睛,并有良好的效果。 – JaredPar 2010-06-01 22:49:33

+0

@JaredPar:和''也一样。 – 2010-06-01 22:50:05

回答

5

用于构建的字符阵列中的C#语法是:

char[] arr = new char[10]; 

阵列中的所有值都被初始化为'\0'

也许List<char>会更适合你的情况,你不知道你需要多少个字符。另一个需要考虑的选项是StringBuilder。如果你不需要可变性,或者使用string

+0

+1表示提示。 – 2010-06-01 22:58:19

+0

好的。列表,我没有听说过。那是C#还是C++? 谢谢! – superlazyname 2010-06-01 23:00:23

+1

@jwaffe:C#。'List'的C++等价物是'std :: vector'。你应该真正决定你想要编程的语言。从你的问题来看,你是否想要C++或C#的答案是非常不清楚的。 – 2010-06-01 23:02:35

2

在C++中,声明为char word[20]的数组实际上在每个条目处都会有垃圾。它不像C#那样有很好的默认值,而是可能只是拥有先前占用内存中特定位置的内容。总之,不要相信价值,除非你自己明确地设定了它。

+0

+1,尽管有些第三方内存管理库会覆盖他们使用众所周知的(他们)模式管理的堆,以检测缓冲区溢出,新增/删除问题等。 – 2010-06-01 22:52:12

+1

这是真的,但并不是非常有用并没有回答这个问题。 – 2010-06-01 22:53:21

+1

@jwaffe:假设数组在堆栈上分配。存在的“垃圾”是以前在该地址使用堆栈的内容:局部变量,返回地址,无论如何。假设数组在堆上分配。存在的垃圾是以前在该地址使用堆的任何内容:空闲列表指针,块大小,旧数据等等。因为像C++这样的语言不能保证内存的内容,所以它们节省了必须对它进行初始化的开销。这个策略引起的错误和病毒的成本会转嫁给你。 – 2010-06-01 23:01:40

相关问题