C语言常用字符数组(character arrays)来表示字符串,在存储字符串时,系统会添加'\0'作为结束符。例如字符串"Hello\n",在数组中存储如下图所示,其中'\0'为空字符(NULL),它的值为0。
编写一个程序,读入一行字符并打印。考虑用字符数组line[MAXLINE]接收输入的字符串,遇到'\n'或EOF停止;由于数组大小的限制,当接收(MAXLINE-1)个字符后,也需要停止。为了接收任意长度的字符串,可以在主函数中判断接收的状态,当一行字符串超长时,进行循环接收。
#include<stdio.h>
#define MAXLINE 10
int getline(char s[],int lim);
int main() {
char line[MAXLINE];
int len,length=0;//length记录输入字符串长度
do {
len=getline(line,MAXLINE);
if(len>0) //有效字符串长度大于0
printf("%s",line);
length+=len;
/*检测line长度和最后一个有效字符是否为换行
*判断输入字符串长度是否超过MAXLINE */
} while(len==MAXLINE-1&&line[MAXLINE-2]!='\n');
printf("%d",length);
return 0;
}
/*getline:读入一行字符串到s,最大长度为lim*/
int getline(char s[],int lim){
int c,i;
for(i=0; i<lim-1&&((c=getchar())!=EOF&&c!='\n'); ++i)
s[i]=c;//字符记入s
if(c=='\n') {
s[i]=c; //换行符记入s
++i;
}
s[i]='\0';//添加结束符
return i;//返回写入s的字符串长度
}
为了便于查看结果,这里设置MAXLINE为10,程序运行效果如图。