6.C语言之字符串
来源:互联网 发布:什么编程语言好学 编辑:程序博客网 时间:2024/05/18 03:34
1. 字符串入门
字符串也称字符串字面量,是用一对双引号括起来的字符序列。
我们也许经常会遇到字符串特别长的情况,在C#中,我们一般会用@符号来表示。
Console.WriteLine(@"Hello World");
但是在C中,我们会这样来写:
int main(){ printf("Hello " "world"); return 0;}
还记得我曾经讲的最多的一句话就是,把字符串当做字符数组来玩。
其实在本质上,C语言就是把字符串作为字符数组来处理,当C语言编译器遇到长度为N的字符串时,它会为字符串字面量分配长度为N+1的内存空间。之所以为N+1,是因为在字符串的末尾以’\0’来结尾,来标识字符串的结束。
既然,我们说字符串在编译器中以字符数组来处理,那么编译器自然会将其看成char *类型的指针。也就是说,我们可以这样来写:
int main(){ char *str="abc"; printf("%s",str);}
2. 字符数组和字符指针
这样的两个声明:
char str1[]="abc";char *str2="def";
前者是普通的字符数组,后者是字符指针。两者都可以用作字符串,但是他们是不一样的。
声明为数组时,就像其他常规的数组一样,可以随意修改数组中的元素,即字符串中的字符。但是用字符指针,我们是不能修改的。
另外,声明为数组时,我们知道我们不能将这个数组名赋给其他的数组,但是如果用指针,我们则可以将该指针指向其他的字符串。
用最简单的例子来说明:
char str1[]="abc";char *str2="def";*str2='q'; //Errorstr1[0]='q';
前者是错误的,后者是正确的。
3. 声明字符数组的惯用法
看段代码就OK了
#define STR_LEN 10int main(){ char str[STR_LEN+1];}
在宏定义处强调的是字符串的大小,而在声明字符数组的时候,将宏定义加1,因为要存储”\0”。
4. 字符串的输入输出
字符串的输出方式有两种,printf和puts,下面的例子足以说明他们的区别:
int main(){ puts("Hello world"); printf("Hello world"); return 0;}
运行结果如下:
答案就是一个有换行,一个没有换行。
读取字符串也有两个方法:scanf和gets函数。
我们来说下他们的区别:
scanf会忽略掉之前所有的空白字符,然后读取所有字符,直到遇到空白字符位置。总之,scanf不会包含任何空白字符,包括空格,制表符等等。
gets不会忽略空白字符,读取所有字符,直到遇到换行符为止。
举个例子吧:
int main(){ char str1[100]; scanf("%s",str1); printf("printf的?结á果?:%s",str1);}int main(){ char str2[100]; gets(str2); printf("gets的?结á果?:%s",str2); return 0;}
- 6.C语言之字符串
- C语言之字符串
- C语言之字符串
- C语言之字符串
- C语言之字符串
- C语言之字符串
- C语言之字符串
- c语言之字符串
- C语言之字符串
- C语言之字符串
- C语言之数组、字符串
- C语言之字符串输出
- C语言之字符串,数组
- c语言面试之字符串
- c语言之字符串分离
- C语言之分割字符串
- c语言篇之字符串
- C语言基础之字符串
- 加载CCBI
- 入静
- Windows 下Apache httpd-2.2.11编译手记
- live555源码分析----SETUP命令处理流程
- 几个常用的操作系统进程调度算法
- 6.C语言之字符串
- [资料]正统UNIX的后裔----BSD
- API-hooking-revealed
- 对mysql explain\desc 的介绍
- 如何编写YARN应用程序
- MonetDB的SQL手册——Trace子句
- live555源码分析---- PLAY命令的处理
- VC++: fatal error CVT1100: duplicate resource. type:MANIFEST
- Documentation\cpu-freq\core.txt