c语言定义字符串 c语言定义字符串( 二 )


char str<> = "abc456";// 有一个隐式的'\0'存储char chs<> = {'a','b','c','4','5','6'};printf("%s %s\n",str,chs); // abc456 abc456烫abc456printf("%d %d %d %d",sizeof(str),sizeof(chs),strlen(str),strlen(chs)); // 7 6 6 14,14是一个随机值;3 C语言中表示字符串常量的约定虽然C语言中没有字符串数据类型,但却允许使用“字符串常量” 。字符串常量是由双引号括起来的一串字符,在表示字符串常量时,不需要人为在其末尾加入‘\0’,例如字符串常量”Hello!”不必写成“Helllo!\0”,C编译程序将自动完成这一工作,在末尾加上结束标志'\n' 。
字符串常量与其它常量不一样,其存储在内存的常量区 。
4 C语言中字符串常量给出的是地址值 。一个字符串常量都分别占用内存中一串连续的存储空间 。这些连续的存储空间实际上就是字符型的一维数组 。这些数组虽然没有名字,但C编译系统却以字符串常量的形式给出存放每一字符串的存储空间的首地址,不同的字符串具有不同的起始地址 。也就是说,在C语言中,字符串常量被隐含的处理成了一个以'\0'结尾的无名字符型一维数组 。因此,若有以下定义:
char*sp, s<10>;
则以下赋值语句是不合法的 。
s = "Hello!";
因为,字符串常量在赋值过程中给出的是这个字符串在内存中所占的一串连续存储单元的首地址,而s是一个不可重新赋值的数组名,因此,些赋值不合法,而以下赋值是合法的 。
sp="Hello!";
此赋值语句并不是把字符串的内容放入sp中,而只是把字符串在内存中所占的首地址赋予了char类型的指针变量 sp,使指针变量 sp 指向该字符串 。

c语言定义字符串 c语言定义字符串

文章插图
c语言定义字符串 c语言定义字符串

文章插图
c语言定义字符串 c语言定义字符串

文章插图
看汇编:
5:char arr<> = "Hello";00401028moveax,0040102Dmovdword ptr ,eax00401030movcx,word ptr 00401037movword ptr ,cx6:char *p = "Hello";0040103Bmovdword ptr ,offset string "hellow" (00422f78)字符串常量存储在常量区,例如上例"Hello"存储在(00422f78) 。
6 字符串与文本文档小的文本文档你可以用一个字符串或字符串数组来处理,使用'\n\做换行来分段即可 。
大的文本文档你可以通过链表(链式存储)来存储,链表的一个节点可以存储一个段落 。
与文本文档相关的输入输出,使用FILE结构体和相应的一些文件处理函数即可完成 。
-End-