c语言编程学习之字符串

字符串字面量与字符变量 1.字符串字面量

字符串字面量是一对双引号括起来的字符序列。当c语言编译器在程序中遇到长度为n的字符串字面量时,它会为字符串字面量分配长度为n+1的内存空间。这块内存空间用来存储字符串字面量中的字符,末尾再存储一个额外字符(空字符)。空字符是一个所有位都为0的字节,用转义字符\0表示。它标志了字符串的结束。

我们知道printf函数的参数接受char*类型的值作为它的第一个参数。
对于printf("abc");,我们传给它一个指针,这个指针为"abc"字面量所在地址的首地址。也就是说,我们传进去的不是这个字面量,而仅仅是一个指针而已。

对于字符串字面量char *s = "abc"来说,我们可以用*(s+偏移量)的方式访问其中字符。也可用数组下标的方式访问,如s[偏移量]。

c语言编程学习之字符串


c语言编程学习之字符串

而试图改变字符串字面量的行为是错误的,如*s = "ab"是错误的。

注意:不要再需要字符串的时候使用字符(反之亦然)!
如函数调用printf("a");是合法的,但函数调用printf('a');是非法的。
这是因为printf函数期望指针作为它的第一个参数,前者为字符串字面量"a"的指针,后者为字符常量'a'。
字符串字面量"a"是用指针来表示的,这个指针指向存放"a"的内存单元。字符常量'a'是用整数(字符集的ASCII码)表示的。

2.字符串变量

常用声明方式:

#define STR_LEN 80 char str[STR_LEN+1];

当声明用于存放字符串的字符数组时,要始终保证数组的长度比字符串的长度多一个字符。这是因为C语言规定每个字符串都要以空字符结尾。

有两种用键盘获取一行字符串的方式:
① gets(str);
这种方式默认输入流是stdin,也就是默认键盘输入。它会直接读入一行,并舍弃掉换行符,然后在字符串最后放入'\0'。但使用它是有风险的,因为读入的一行的字符数量可能会超过str字符数组能存储量的最大值,这样就会发生越界。
② fgets(str,sizeof(str),stdio);
这个函数读入一行,但会把末尾的换行符也读入数组中。使用它是安全的,因为我们传入了str字符数组的大小,它根据字符数组大小来读入字符,若已读取了sizeof(str)-1个字符,就不往下接着读入字符了,然后在字符串末尾放入'\0'。

代码

#include <stdio.h> int main(){ char a[30]; gets(a); // fgets(a, sizeof(a), stdin); //最后的换行符也会被读入 printf("%s\n", a); return 0; }

输入

Hello handsome guy !

运行

Hello handsome guy !

代码

#include <stdio.h> int main(){ char a[30]; // gets(a); fgets(a, sizeof(a), stdin); //最后的换行符也会被读入 printf("%s\n", a); return 0; }

输入

Hello handsome guy !

运行

Hello handsome guy !

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwwjfs.html