- C语言的字符串
- C语言虽然没有专门的字符串类型,如java的string类型,但是C语言有关于字符串的概念,使用字符类型的数组来作为字符串。
- 字符串的初始化赋值
- 完全初始化赋值
char a[]={'h','a','l','l''o',' ','w','o',r','d'} //不添加\0
- 部分初始化定义赋值
char b[]="hallo word" //默认添加\0
- 先定义长度再赋值
char c[10]={'a'} //默认添加整数0
char a[]={'h','a','l','l''o',' ','w','o',r','d'}; char b[]="hallo word"; printf("%d\n",sizeof(a)); //输出10 printf("%d\n',sizef(b)); //输出11
- 字符串定义再赋值
注意:若先定义字符串,再使用字符串赋值,不能一次性赋值,必须单个赋值
char str[10]; str="hello";//错误示范 //正确示例 str[0]='h'; str[1]='e'; str[2]='l'; str[3]='l'; str[4]='o';
- 完全初始化赋值
- 字符串数组的输入
-
按照字符数组进行
单个字符分别输入,形成一连串的字符
for(int i = 0; i < 12;i++){ scanf ( "%c" ,&buf[i] ); if(buf[i] == 32 ){ //这里是space的字符码,或者使用回车 ==’\n' / / buf[i] = '\0'; buf [i+1] = '0 '; break; }
按照字符串进行
-
scanf("%s",数组名);
注意:这里在控制台输入是一次性输入,
若想输入一个一次回车即使用循环,在scanf后使用getchar()方法吸收回车符号
-
-
- 字符串数组的输出
- 按照字符数组
-
单个字符分别输出,形成一连串的字符
//按照单个字符,字符数组,如果到达字符串结束,就不用循环
for(int i = 0 ;i < 10; i++) { if(buf[i] == '\0') break; printf("%c" , buf[i]); }
- 按照字符串进行
%s:格式化字符,代表的是字符串,输出到\O为止
printf("%s",数组名);
-
- 按照字符数组
- C语言字符型数组的\0丢失
- 在使用字符串输出printf("%s",a),由于输出到结束符合\0为止所有在字符串输出完后,依然输出直到遇到\0。
- 已下代码示例
#include<stdio.h> int main(){ { char a[10]={0} ; for(int i=0;i< 10;i++){ a[i]='a'+1; } } char b[7]={0}; for(int i=0;i<7;i++){ b[i]='x'; } printf("%s\n",b); return 0; }
- 结果输出xxxxxxxbbb
- 解释如下:
{}是代码块,运算完成即释放内存(在计算机中释放存储空间,是指该空间可以使用,之后的操作对其空间覆盖),但由于内存中内容还在
且通过printf输出字符串,要输入到\0为止,b将\0丢失了
-
所以最后输入时将b的内容输入完成(即xxxxxxxx),然后没有遇到\0,继续执行输出,因为b在a的基础上进行覆盖,即输入b,直到在原来a的末尾遇到\0完成输出。
字符型数组初使用问题
于 2022-11-16 19:18:03 首次发布