在C语言中,没有字符串类型,但是可以通过字符数组来模拟字符串。
字符串可以在栈上,堆上,静态区和常量区进行分配。
char buf[50] = "abc";
char buf[] = "abc";
对应于第一种,编译器会自动进行优化,也就是buf的前三个元素分别是“a”,“b”,“c”,从buf[3]到buf[49]都是“ ”
对于第二种,编译器会自动推断出元素的长度,因此第二种仅仅相当于是第一种的前4个字符。
上面两种都称为C 类型的字符串,这是因为它们都是以" "结尾的。
char buf[50] = {"a","b","c"};
char bud[] = {"a","b","c"};
对于第一种情况,编译器的优化方式和上面第一种是一样的。
对于第二中情况,那就真的是长度为3的字符组数了,由于不是以0结尾,因此就不是C风格的字符数组。
可以通过strlen函数求得字符串的长度,是不包括“ ”的。可以通过sizeof操作符求得字符串在内存中占的大小,是包括“ ”的。