C语言字符串输入输出
概念
在C语言里,字符串的概念就是一个字符数组
赋值
逐个赋值
最原始的初始化方法就是逐个赋值
char str[5]={'h','e','l','l','o'}; 就相当于 str[0]='h',str[1]='e',str[2]='l',str[3]='l',str[4]='o';
对字符数组初始化时,系统会对未初始化的元素自动赋0值,就是 ‘\0’ ,即空字符(结束符)
char str[10]={'h','e','l','l','o'}; 只对索引为0、1、2、3、4的元素初始化了值 对于剩余的索引为5、6、7、8、9的元素系统自动赋值'\0' 即空字符
一次性赋值
也可以 使用字符串常量给字符数组赋值
注意:
使用字符串常量给字符数组赋值时
系统会在末尾自动加上空字符 ‘\0’(结束符)
所以在使用字符串常量给字符数组赋值时,
一定要保证数组的长度大于等于字符串的有效长度+1
char str[6]="hello" 实际上字符数组的内容为{'h','e','l','l','o','\0'} 如果字符数组开的小了,就会编译报错 char str[5]="hello" 因为没有地方放结束符了
在处理字符串时,例如 printf() 输出,
遇到 ‘\0’ 结束符就会结束,也就是说,第一个’\0’之后的元素就不会输出了
或者到了字符串的末尾,也会自动停止
char str[10]={'h','e','l','l','o','\0','s','t','r','s'}; printf("%s\n",str); 结果为 hello 因为第一个'\0'之后的内容就不会输出
scanf() 输入
scanf 是 scan format 的缩写,意思是格式化扫描,也就是从键盘获得用户输入,和 printf 的功能正好相反。
利用scanf()输入字符串时,遇到空格或回车,系统便认为一个字符串输入结束
利用scanf() 一次性输入字符串时,需要给出开始存储的首地址,即数组的首地址,之后每个字符都会按照顺序逐个赋值
数组在内存中是一段地址连续的空间
要记住,这个数组的数组名就是这段空间的首地址,即str[0]对应的地址
char str[10]; scanf("%s",str); printf("%s",str); 字符数组名就是这个字符数组的首地址,即str[0]对应的位置 由于数组在内存中是一组地址连续的空间 所以只需给出这段空间的开始存储的位置即可 这些字符就会自动入座
利用scanf()输入字符串时,遇到空格或回车,系统便认为一个字符串输入结束
scanf("%s",str); printf("%s",str); 此时我输入 I love you 输出为 l 因为I love you 这段话有空格,在输入时遇到空格系统就会判断字符串输入结束
当然,你也可以让数组开始存储的位置不是首地址
让这个字符串在这个字符数组的第n个位置开始存储
前提是从这个位置开始存放字符串,数组的容量一定要足够
此时,对应的输出字符串时也要稍加修改
例如 我从这段地址的第二个位置开始存储字符串 char ch[10]; scanf("%s",ch+1); ch+1 就是 ch[1]的地址 但是在输出时 如果你这样写,printf("%s",ch), 你会发现没有输出 原因在于,你没有给ch[0]赋值,所以系统就给 ch[0] 自动赋值'\0'结束符 printf("%s",ch)在输出时,从这个数组的首地址开始输出, 上来就遇到了结束符 '\0',就会结束输出; 当然这个问题也可以解决, 因为我们在输入时,设置了从这段内存的第2个位置开始存储, 所以我们在输出时,可以从第2个位置开始输出 printf("%s",ch+1), ch[1]就是这个数组的第2个元素,ch+1就是对应的第2个地址 这就是从ch[1]开始输出,此时就会有结果
getchar()
getchar()的作用是,读取一个字符并返回这个字符
这是逐个字符输入,只要是字符,都可以用getchar()来输入
我们知道,空格和回车也是字符,所以空格和回车可以用这种方式来输入
在使用getchar()输入字符串时不会因为空格或回车而受影响,
因此,使用getchar()在输入字符串时需要给出输入结束的条件
char str[5]; //定义一个临时字符来接收getchar()读取到的字符 char ch=getchar();//扫描第一个字符 int i=0; while(i<5)//结束输入的条件 { str[i]=ch; ch=getchar(); } printf("%s",str);
假如我们希望回车就代表输入结束,那么就可以这样
char str[10]; char ch=getchar();//扫描第一个字符 while(ch!='\n') { str[i]=ch; i++; ch=getchar()//继续扫描下一个字符 }
gets()
gets()的作用是从键盘输入一个字符串,遇到回车就结束
char str[100]; gets(str);//给出数组的首地址即可
输出
putchar()逐个字符输出
char str[6]="hello"; int i; for(i=0;str[i]!='\0';i++) putchar(str[i]); 或者 for(i=0;str[i]!='\0';i++) printf("%c",str[i]);
printf()输出整个字符串
char str[6]="hello"; printf("%s",str);
puts()输出字符串
puts()可以输出字符数组和字符串常量
puts()输出完之后,会自动换行
char str[6[="hello"; puts(str); 或者也可以 puts("hello");
感谢阅读,希望能够帮到大家!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具