1. 打印任意长度的输入行的长度 ,是指这个输入行的长度不受限制,刚开始想到两种方法:
* 动态输入数组的大小
* 用malloc函数
好像这样 都没有实现。
后来看了源代码才理解了,数组的长度一定,当数组读入字符读满停止了读字符,但是行可以继续读啊 这里有点不明白了。
还有就是尽可能多的打印文本,就是把存储在数组的字符打印出来。
int getline(char s[], int lim)
{
int c, i, j;
j = 0;
for (i = 0;/*i < lim-1 &&*/ (c = getchar()) != EOF && c !='\n'; ++i)
if(i < lim - 2) //这里为何 i < lim - 2 没有想明白?
{
s[j++] = c;
}
if(c == '\n')
{
s[j++] = c;
++i;
}
s[j] = '\0';
return i;
}
这里做了两处修改:
1. 循环语句 ,不再检查字符数是否超出数组s的限制,getline能返回任意长的输入行的长度并能存储尽可能多的输入行内容。
2. 用于判断字符串数组是否还有空位置的表达式
改成了 if(i < lim - 2)
原因是 数组s的最后一个小标是 lim-1 数组s中有lim个元素且我们已经读去了输入的字符。
i < lim -2 是将数组s里给换行符留个位置,即 s[lim - 2] = '\n';
还要给字符串结束符留出一个位置,即s[lim -1] = '\0'.