gpt4 book ai didi

c - 有人认为 The C Programming Language 2E Page29 有问题吗?

转载 作者:太空狗 更新时间:2023-10-29 15:00:50 24 4
gpt4 key购买 nike

我目前正在学习著名的 C 书籍 - The C Programming Language, 2Ed。当我尝试 P.29 中的代码时,我认为 getline 函数有问题:

int getline(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;
}

如果当 for 循环结束时,i == lim-1c == '\n' 会怎样?在这种情况下,我认为数组将超出边界,因为 s[lim] 将设置为“\0”。

有人认为这是错误的吗?感谢您的帮助。

最佳答案

&& 运算符具有“早出”语义。这意味着如果 i == lim-1,则不会执行其余条件 - 特别是 c = getchar() 将不会被调用。

这意味着在这种情况下,c 的值来自循环的最后一次迭代 - 因为循环条件包括 c != '\n' ,这个值不能是 '\n'(否则循环上次已经退出)。

只要lim大于1就成立,这一定是函数的前置条件(因为调用lim小于等于1的函数将导致读取 c 的未初始化值)。

关于c - 有人认为 The C Programming Language 2E Page29 有问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17333576/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com