C语言——字符串

本文详细介绍了C语言中字符与ASCII码的关系,以及字符串的本质和存储方式。重点讲解了C语言中字符串与字符数组、指针变量的交互,包括字符串赋值的注意事项和访问字符的方法。此外,还讨论了字符串的输入输出,如`scanf`和`printf`的使用,以及它们的潜在问题。最后,提到了字符串操作中的安全问题,如输入字符串长度的检查。
摘要由CSDN通过智能技术生成

一、字符

ascii码:计算机不能直接存储字符,使用一个编码方式,将字符和整数
一一对应。比如:‘a’ - ‘z’ 97 ~ 122,‘A’- ‘Z’ 65 ~ 90,‘0’- ‘9’ 48 ~ 57

二、字符串

1.C语言字符串
使用“”括起来的式子。“zhangsan”字符串,本质为一个常量,存放在常量区。字符串的值,为这个字符串的首地址。
2.C语言中字符串的引用。
2.1.字符串与字符数组:
我们可以利用字符数组存放字符串,C语言允许像下面这样将字符串,作为初始值赋给字符数组变量:char ch[] = “abcde”;
等价于:char ch[] = {‘a’,’b’,’c’,’d’,’e’,’\0’}; //6B,
但却不等价于:char ch[] = {‘a’,’b’,’c’,’d’,’e’}; //5B.

【注】
  对字符数组进行字符串赋值需注意:
  1、字符数组大小必须定义足够大,因此字符串的长度必须小于字符数组的大小;
	   字符数组的长度 >=  字符串的有效长度  + 1
		char  ch[9] = “zhangsan”;
		//字符数组的大小 >= 9
2、如果在定义时没有字符数组进行初始化,那么之后只能对其元素进行逐个赋值;
	char ch[] = “zhangsan”;   //正确的
	char  ch[10];
	ch  = “zhangsan”;              //错误的 
	//ch 是一个指针常量,不能被赋值。

2.2字符串与指针变量
char *p = “zhangsan”;将”zhangsan”的首地址,赋值给了p变量。p指针所指向的字符串,仍然是一个常量。
字符串数组保存和指针变量保存:
访问字符串中的字符,访问方式一样。
char ch[] = “zhangsan”;
char *p = “zhangsan”;
1、下标法
元素:ch[i] p[i]
指针:&ch[i] &p[i]
2、指针偏移法。
元素: *(ch + i) *(p + i)
指针 ch + i p + i
字符串数组保存和指针变量保存区别:
char name[] = “zhangsan”; //可变的字符串,存放在栈区
char *p = “zhangsan”; //不可变的字符串,存放在常量区
name[0] = ‘a’; //正确的 “ahangsan”
p[0] = ‘m’; //错误的

【注】
	在C语言中没有专门的字符串变量,如果想将一个字符串存放在变量中以便保存,必须使用字符数组,即用一个字符型数组来存放一个字符串,数组中每一个元素存放一个字符。例如   char ch[] = “welcome”;

三.字符串操作

1.字符串的输入输出

	1.1 字符串的输入函数
			1) scanf
				%s
				scanf(“%s”, str);					
				(1) 以回车、空格、制表符作为输入结束的标志。
				(2) 不会接受(1)里面的输入结束标志符。
				(3) 会在输入字符串的末尾 + \0.
				%[^\n]
				(1) 除了 \n,不读,读取其他的字符,只会以 \n 作为结束的标志;
				(2)	不会读取 \n,会在字符串的末尾 + \0.
	【scanf输入字符串的缺陷】:不会检查输入字符串的长度,可能会存在越											                           界,导致系统崩毁。
	1.2 字符串的输出
			1) printf
				 函数原型:
				 int printf(“%s\n”, char *str);
				 int printf(“hello world”);
				 int printf(“%s\n”, “hello world”);
				 函数参数:
						 “%s”:       字符串的格式化符。
						 char *str:    字符串的首地址
				 返回值:
					    int :           输出的字符串的有效长度。
			2) puts
				 函数原型:
				 		int   puts(const char *s);
				 函数参数:
						const char *s:  输出字符串的首地址;
				 返回值:   输出是否正常的标志,整数:输出正常。
						
				【值】:puts输出字符串之后,会自动换行。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值