C语言中的字符串
在C语言中,把用一对双撇号所括起来的0个或多个字符序列成为字符串常数。字符串并不存放在一个变量中,而是存放在一个字符型数组中。
1. char a[] = "123" 和 char b [] ={'1','2','3'}的区别:
sizeof(a)=4 sizeof(b)=3
2. char s[] = "abc";和char* s = "abc";的区别:
前"abc"储存在内存区域中的栈中,内容可以更改。(字符串变量)
后者"abc"储存在内存区域中的常量数据区,内容不可更改;(字符串常量)
存在常量区的内容会缓存起来,下次遇到相同的常量就不会开辟新的存储空间。
例:char *s1 = “abc”; char *s2 = “abc”;
则s1==s2 (指向相同的地址)
3. ‘\0’ 的ASCII码是0
char a[] =”123”; 等价于 char a[] = {‘1’ ,‘2’ , ‘3’ , 0 };
4. ‘\0’ 的作用:
char name[] = “it”;
char name2[] = { ‘o’ , ‘k’ };
printf(“%s”,name2); //输出为:okit。原因是printf 从name2[0]开始输出字符直到遇到\0结束
int size = strlen(name2); //size ==4
5. 利用指针保存字符串数组:
char*names[3] = {“jack” , “rose” , “taitan” };
6. 单个汉字在字符串中所占字节:
编码方式不同会导致单个汉字所占字节数不同。ANSI编码中为2个字节,UTF-8编码中为3个字节。
可以通过以下实验可以证明:
新建文本文档,用记事本打开,输入以下代码:
#include <stdio.h> #include <string.h> int main() { int size = strlen("哈ha"); printf("%d",size); return 0; }文件——另存为——保存类型(所有文件)——文件名(size1.c)——编码(ANSI)——保存。
在编码选项中可以看到记事本的默认编码方式为 ANSI 。
文件——另存为——保存类型(所有文件)——文件名(size2.c)——编码(UTF-8)——保存。
分别编译连接两个文件,然后运行。