C语言 字符串

1,一维字符数组

(1)定义

char 数组名 [大小];

(2)初始化字符数组

char s[7]={'h','a','a','p','y'} //其余不确定

char s[ ]=.......         //编译器会计算出数组大小 

static char s[7]={'h','a','a','p','y'}  //其余为0   所代表的是字符   '\0'

2,字符串

(1)特点

  1. 字符串的有效长度==有效字符个数
  2. 字符串由 有效字符 和 字符串结束符'\0'组成
  3. "Happy"由6个字符组成  'H' 'a' 'p' 'p' 'y' '\0'
  4. 字符串输入数组时,数组长度==有效字符数+1

(2)初始化

以"Happy"为例子

static char s[6]={'H','a','p','p','y','\0'}

static char s[6]="Happy"      //注意是双引号

static char s[6]={"Happy"}

(3)字符串输入和赋值

A.输入

 static char s[80];

s[0]='a';

s[1]='\0';

B.赋值

static char s[80];

s="a";

"a"和'a'区别:

"a"是由'a' and '0' 两个字符组成

'a'单指一个字符

(4)其他

static char s[80]="Happy"; 

只对前六个赋值,字符串遇到'\0'结束,所以不用担心。'\0'之后的其他元素和字符串无关。

'\0'不是指ASCII码值,它是字符,它的ASCII码值是0,也就是ASCII码表的第一个字符。'\0'并非是空格,空格的ASCII码值是32,只不过是输出类似于空格。

记得将输入结束符转换为'\0'.

(5)易错

1. 下述对C语言字符数组的描述中错误的是(C)。

A.不可以用关系运算符对字符数组中的字符串进行比较

B.字符数组中的字符串可以整体输入、输出

C.可以在赋值语句中通过赋值运算符"="对字符数组整体赋值

D.字符数组可以存放字符串

A   “不可以用关系运算符对字符数组中的字符串进行比较。可以用关系运算符对字符进行操作,却不能对字符串进行操作

在C语言中,字符数组可以存放字符串。字符数组是对字符串有特殊处理能力的数组。字符数组就是用来对字符串进行操作的,当然可以存放字符串,且可以对字符串进行整体输入、输出。

C 数组的赋值操作是不能整体操作的,而需要对其中元素逐个赋值,字符数组也不例外。

不可以用赋值语句给字符数组整体赋一串字符.
char mark[80];
mark=“happy”;

当字符串变量是用的字符数组,不能由赋值语句直接赋字符串常量.
char Str_1[10]=“hello”;
char Str_2[10];
Str_2=Str_1;

以上赋值时不允许的

D 字符数组存放字符串方法如下

static char s[6]="Happy";

3,字符串再次探讨

(1)字符串基本特征(补充)

  1. 字符串是以 0或'\0'结尾的一串字符

  2. 0标志字符串的结束,但它不是字符串的一部分。计算字符串长度的时候不包含这个0

  3.  string.h里有很多处理字符串的函数

a[ ]={'h','e','l','l','a'}

b[ ]={'h','e','l','l','a','\0'}

b是字符串,a不是

(2)字符串常量

  • "hello"
  • "happy"会被编译器变成一个字符数组放在某处,长度为6,结尾还有表示结束的'\0'
  • 相邻字符串,无其他符号,则会连在一起
  • #include <stdio.h>
    int main(){
    	printf("你好,很高兴"
    	"见到你,我很开心。");
    	return 0;
    } 
    
    输出:你好,很高兴见到你,我很开心。
    ​​​​​​​  

 字符串常量以字符数组的形式存在

不能进行运算

按照数组遍历的方法,遍历字符串

(3)字符串变量

char* str="happy" 

#include <stdio.h>
int main(){
	char* str="happy";  //初始化指向一个字符串常量
	char* str2="happy";
	int i=1;
	printf("i = %p\n",&i);
	printf("str = %p\n",str);
	printf("str2 = %p\n",str2);
    //str[0]='B';   //[Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]
	printf("%c",str[0]);
	return 0;
} 

输出:
i = 000000000062FE0C
str = 0000000000404000
str2 = 0000000000404000

i是本地变量,我们发现变量i的内存地址远远大于str,str2。

而且更改字符串的话,出现了warning

  • 指针str,str2指向了一个很远的地方。叫做代码段。只读,不可更改。所以更改字符串时出现了warning
  • 想要更改,使用字符数组

 

 

 (4)char* 是字符串?

  1. 字符串可以表达为char*
  2. char*不一定是字符串
  3. char* 本意是指向字符或字符数组的(类比 int*,指向整型,或整型数组)
  4. 只有当char* 指向的字符数组,最后一个是'\0'时,才可以称char* 为字符串

 

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值