C 风格字符串和字符串字面值 (C-style string and string literal)

目录

C 风格字符串和字符串字面值 (C-style string and string literal)#

C 风格字符串是一串以 '\0' 结尾的字符. 按照从 C 继承来的约定, char*char const* 虽然是指针, 但很多时候会被认为是 C 风格字符串进行处理.

1char array[] = {'a', 'b', 'c', '\0'};
2
3int const size = std::strlen(array);  // 计数直到遇到终止字符 '\0'
4std::cout << array << '\n';           // 输出直到遇到终止字符 '\0'

而形如 "hello" 的写法称为字符串字面值, 是书写 C 风格字符串的便携方法, 它实际是将 "hello" 作为 字符数组 静态存储在一个 只读区域, 因此不能修改它的内容.

1"hello";  // "hello" 的类型是 char[6], 除了 hello, 之后还有终止字符 '\0'.
2
3char const* string = "hello";  // 获取它首元素的指针, 按约定这就被认为是一个字符串
4
5char* string = "hello";  // 警告: 字符串字面值不允许被转换为 char*
6string[1]    = 'a';      // 未定义行为!

你可以用一个字符串字面值初始化字符数组.

 1char array[] = "hello";
 2sizeof(array) == sizeof(char[6]);
 3// 相当于:
 4char array[6];
 5array[0] = 'h';
 6array[1] = 'e';
 7array[2] = 'l';
 8array[3] = 'l';
 9array[4] = 'o';
10array[5] = '\0';

相关解答#