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'};
只对索引为01234的元素初始化了值
对于剩余的索引为56789的元素系统自动赋值'\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");

感谢阅读,希望能够帮到大家!

posted @   秋天Code  阅读(622)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示