juliusun.com
第 22/50 节 冥河C语言教程
C语言中的字符串,是以'\0'字符结尾的字符数组。通常字符串用写法是用双引号引起来,如"abc"。C语言在处理双引号引起来的字符串时,是保留字符串内所有字符,作为数组元素列表,同时,在最后补上'\0'字符。如"abc"编译器在处理时是字符数组{'a','b','c','\0'}。
既然字符串是数组,定义字符串时,当然可以用字符数组的语法,如char s[4] = {"abc"};,abc三个字符加上'\0'共4个字符。
C语言语法规定,字符串初始化字符数组时,花括号可以省略,直接写成char s[4] = "abc";。
因为编译器在双引号内最后添加了'\0'字符,相当于已经列举出了所有数组元素值,这个例子还可以直接写成char s[ ] = "abc";。
数组名就是字符串地址。数组名s等同于&s[0]。
介绍两个关于字符串的函数,puts和gets。puts作用是输出字符中,gets作用是输入字符串。使用格式如下:
puts(字符串地址) gets(字符串地址)
puts(字符串地址)效果和printf(字符串地址)或printf("%s",字符串地址)类似。部分编译器输出字串之后,自动追加\n。
gets(字符串地址)效果和scanf("%s",字符串地址)类似。不过很多地方gets优于scanf。由于不同编译器实现这两个函数机制不同,这里不作深入解释。
我们知道了字符串的原理,我们就可以操作字符串了。我们完成这样一个功能:输入一个字符串,字符个数大于等于4个时,只保留前4个字节并输出。字符个数小于4个时,全部输出。
我们可以这样解决:既然字符串以'\0'结尾,我们保留前4个字符,只要将第5个字符,也就是数组下标为4的元素值设置成'\0'就可以了。
假设字符数组名为s,输入4个字符,s[4]的元素自动为'\0',重新赋值'\0'没有影响。输入字符小于4个,由于s[4]之前已经有了'\0',s[4]为'\0'对字符串无影响。个数大于4,s[4]赋值为'\0'就提前结束了字符串。代码如下:
超过4个字符效果类似如下图:
不足4个字符效果类似如下图:
效果图仅供参考。