字符数组和字符串
C语言中没有字符串这种数据类型,C语言中通过char型数组
来替代字符串的功能。
C语言中的字符串一定是一个char的数组
,但是注意 char的数组未必是字符串
- 数字0 (和字符'0' 等价)结尾的char数组就是一个字符串
- 如果char数组没有以0结尾,那么就不是一个字符串,只是一个
普通的字符数组
- 字符串可以理解成是一个特殊的char数组
int main(int argc, const char * argv[]) {
// 字符
char ch = 'w';
// 字符数组
char arr[5] = {'h','e','l','l','o'};
// 字符串
// 字符串结束的标志必须是\0 (数字0 等同于\0,但不等同于字符'0')
char str[] = {'h','e','l','l','o','\0'};
// char str[] = {'h','e','l','l','o','0'}; 和上面等价
// 字符串 “hello” 会以 \0 作为结束标志位
char *str1 = "hello";
// char str[] = "hello" 等同于 char str[] = {'h','e','l','l','o','\0'};
char str2[] = "hello";
// 如果一串字符没有以0结束,则printf会一直尝试打印下去...
printf("%s",str);
// 遍历
for (int i = 0; i < sizeof(arr); i++) {
printf("%c",arr[i]); // 打印 hello
}
for (int i = 0; i < sizeof(str); i++) {
printf("%c",str[i]); // 打印 hello
}
for (int i = 0; i < sizeof(str2); i++) {
printf("%c",str2[i]); // 打印 hello
}
return 0;
}
字符串的长度
从头开始,一直到结束符0,中间的字符个数就是字符串的长度
注意事项
int main() {
int i;
char str1[30] = "http://c.biancheng.net";
char str2[] = "C Language";
char str3[30] = "You are a good\0 boy!";
printf("str1: %s\n", str1);
printf("str2: %s\n", str2);
printf("str3: %s\n", str3);
return 0;
}
// 打印结果
str1: http://c.biancheng.net
str2: C Language
str3: You are a good
str1 和 str2 很好理解,编译器会在字符串最后自动添加 ‘\0’,并且数组足够大,所以会输出整个字符串。对于 str3,由于字符串中间存在 ‘\0’,printf() 扫描到这里就认为字符串结束了,所以不会输出后面的内容。
(1) 数组要足够大: length + 1
(2) 不以0结束的字符串,不是正常的字符串
(3) 0之后的字符不会被打印出来
网友评论