--------2017.07.23更新--------
谢谢各位的支持,再这里重新整理一份。
在C语言中,字符串(ASCII字符串,不考虑C++的std::string等特殊字符串)实际存储为字符数组存储,所以以下表达式是成立的:
const char * str = "hello world!"; // 以字符数组指针变量接收字符串
这里先贴问题的答案核心: '\0'用于表示字符数组的结束,空格为缓冲区读取时的默认分隔符之一。
关于
'\0'
的具体含义解释
当存在字符数组长度大于字符串实际长度时,C语言在解析字符串时,将寻找字符数组的最后
'\0'
所在索引,而将其作为字符串的结束,并将其解析为一个字符串。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, const char * argv[]) {
char *strArr1 = (char *) malloc(12 * sizeof(char)); // 声明字符数组
char *strArr2 = (char *) malloc(12 * sizeof(char)); // 声明字符数组
int i = 0;
const char * str = "Hello, World!\n"; // 以双引号标明的字符串,将默认在结尾加\0,即索引为14的字符为\0,其ASCII码为0
printf("%d\n", str[14]); // 验证上述说法
for (; i < 8; i++) {
strArr1[i] = 'A' + i; // 为字符数组赋值,构建字符串
strArr2[i] = 'A' + i;
strArr1[11] = 0; // 赋值为0等价于赋值于\0
printf("数组结尾加\\0:%s\n", strArr1);
strArr2[i] = 0;
printf("字符串结尾加\\0:%s\n", strArr2);