1. 字符串和字符数组的区别:
- C语言中没有字符串这种数据类型,可以通过char的数组来代替
- 字符串一定是一个char的数组,但char的数组未必是字符串
- 数字0(和字符’\0’等价)结尾的char数组就是一个字符串,但如果char数组没有以数字0结尾,那么就不是一个字符串,只是普通字符数组,所以字符串是一种特殊的char数组。
2. 数字0,C语言字符串结束标志’\0’,空格的关系
来段测试代码看下:
#include <iostream> #include <string.h> int main(void) { char str[] = "abcde fghij \0kl"; printf("the length of str is %ld\n", strlen(str)); printf("the length of str is %ld\n", sizeof(str)); printf("空格的ASCII = %d, \'\\0\'的ASCII = %d\n", str[5], str[12]); printf("%s", str); return 0; }
输出:
数字0与’\0’的ASCII值一样,也就是数字0与’\0’一样,跟空格没任何关系
3. 关于’\0’的一些特殊点
- strlen在计算字符串的长度时,遇到’\0’就结束
- 字符串与字符数组的差别就在于,字符串结尾是’\0’,字符数组没有’\0’
- %s会接收字符串结束标志’\0’之前的所有字符,‘、0’之后的就不再接受
- char str[] = “hello”; //strlen(str) = 6,字符串常量会在结尾自动加’\0’
char str[] = {‘h’, ‘e’, ‘l’, ‘l’, ‘0’};; //strlen(str) = 5 - strcpy是依据’\0’作为判断结束的