【发布时间】:2021-09-11 13:43:01
【问题描述】:
我无法理解 mgetline 在这段代码中的作用。 谁能帮帮我?
int mgetline(char s[],int lim)
{
int c, i;
for(i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; ++i)
s[i] = c;
if(c == '\n')
{
s[i] = c;
++i;
}
s[i] = '\0';
return i;
}
【问题讨论】:
-
它具有额外的好处,您可以指定要读取的字符数,这样您就不会溢出输入缓冲区。此外,它确保字符串以空值结尾。有没有让你难以理解的台词?
-
从
getchar()调用中可以看出,该函数读取了一些输入。为了您在学习 C 方面的进步,最好尽可能自己分析代码并提出具体问题。您还可以在调试器中逐步运行您的程序,看看它是如何工作的。不幸的是,for循环可能难以调试,因为在for语句中组合了多个条件。 -
它用一行文本加载传递的数组。你到底有什么不明白的?
-
注意,当
lim为 1 时,可能存在缓冲区溢出。c应初始化为非\n的任何值。