C语言字符串输入输出

时间:2025-05-16 07:27:43

文章目录

  • 概念
  • 赋值
    • 逐个赋值
    • 一次性赋值
    • scanf() 输入
    • getchar()
    • gets()
  • 输出
    • putchar()逐个字符输出
    • printf()输出整个字符串
    • puts()输出字符串

概念

在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");

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