在C中,可以在声明中使用字符串文字,如下所示:
char s[] = "hello";
Run Code Online (Sandbox Code Playgroud)
或者像这样:
char *s = "hello";
Run Code Online (Sandbox Code Playgroud)
那么区别是什么呢?我想知道在编译和运行时的存储持续时间实际发生了什么.
访问其边界之外的数组有多危险(在C中)?有时候我会从数组外部读取(我现在理解我然后访问我的程序的某些其他部分使用的内存,甚至超过它)或者我试图将值设置为数组之外的索引.该程序有时会崩溃,但有时只是运行,只会产生意想不到的结果.
现在我想知道的是,这真的有多危险?如果它损坏我的程序,那就不是那么糟糕了.另一方面,如果它打破了我的程序之外的东西,因为我以某种方式设法访问一些完全不相关的内存,那么它是非常糟糕的,我想.我读了很多"任何可能发生的事情","分割可能是最不好的问题","你的硬盘可能会变成粉红色,独角兽可能会在你的窗下唱歌",这很好,但真正的危险是什么?
我的问题:
我使用OSX 10.7,Xcode 4.6.
首先,我包含了C++,因为C++只是C的父级,所以我猜这两个答案都适用于此,尽管我在这个问题中要求并关注的语言是C,而不是C++.
不久前我开始阅读C书"Head First C".在本书(第43/278页)中,它将为您回答一个问题.文字字符串和字符数组之间是否存在任何差异.
由于我不知道字符串是什么,所以我完全被抛出了.我理解一个字符串只是一个字符数组,但是什么使得'字符串'文字?如果C实际上没有为字符串提供任何类(如C#或Java等现代语言),为什么它在C中提到字符串.
任何人都可以帮助清理这种混乱吗?我真的很难理解微软在这里对此有何看法,并认为我需要一个我能理解的更简单的解释.