C语言中的字符数组和字符串

在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操作符求得字符串在内存中占的大小,是包括“”的。

原文地址:https://www.cnblogs.com/andyniu/p/7623065.html