字符串
C 字符串是字节(char 类型)的一维数组,以一个0 字节终结。C 中的常量字符串,通过把字符串的字符放置在双引号("")之间来编写:
1. "A constant string"
当编译器在内存中创建一个常量字符串时,它自动在末尾添加0 字节。但是,如果声明了一个用来保存字符串的char 数组,在确定需要多少空间时,则必须记住包含0 字节。如
下的代码行将常量字符串“Hello”的5 个字符及其最终的0 字节复制到数组aString 中:
1. char aString[6] = "Hello";
与任何其他的数组一样,表示字符串的数组也不进行边界检查。溢出程序输入所使用的字符串缓冲区,是黑客惯用的招数。
char*类型的变量,可以用一个常量字符串来初始化。可以将这样的一个变量设置为指向一个不同的字符串,但是,不能够使用它来修改一个常量字符串:
1. char *aString = "Hello";
2.
3. aString = "World";
4.
5. aString[4] = 'q'; // WRONG - causes a crash
第1 行把aString 指向常量字符串“Hello”。第2 行将aString 修改为指向常量字符串“World”。第3 行引发程序崩溃,因为将常量字符串存储到了一段受保护的、只读的内存中。
C 字符串是字节(char 类型)的一维数组,以一个0 字节终结。C 中的常量字符串,通过把字符串的字符放置在双引号("")之间来编写:
1. "A constant string"
当编译器在内存中创建一个常量字符串时,它自动在末尾添加0 字节。但是,如果声明了一个用来保存字符串的char 数组,在确定需要多少空间时,则必须记住包含0 字节。如
下的代码行将常量字符串“Hello”的5 个字符及其最终的0 字节复制到数组aString 中:
1. char aString[6] = "Hello";
与任何其他的数组一样,表示字符串的数组也不进行边界检查。溢出程序输入所使用的字符串缓冲区,是黑客惯用的招数。
char*类型的变量,可以用一个常量字符串来初始化。可以将这样的一个变量设置为指向一个不同的字符串,但是,不能够使用它来修改一个常量字符串:
1. char *aString = "Hello";
2.
3. aString = "World";
4.
5. aString[4] = 'q'; // WRONG - causes a crash
第1 行把aString 指向常量字符串“Hello”。第2 行将aString 修改为指向常量字符串“World”。第3 行引发程序崩溃,因为将常量字符串存储到了一段受保护的、只读的内存中。