gpt4 book ai didi

c - 如何使用 gets() 和 strlen 循环程序?

转载 作者:太空宇宙 更新时间:2023-11-04 01:05:06 25 4
gpt4 key购买 nike

我注意到一个程序正在使用这段代码循环:

char line[100];

while (gets(line), strlen(line)){//some stuff}

程序一直循环,直到我没有在行中写入而按下回车...这是如何工作的?

我已经知道 gets() 存储当前行,而 strlen() 返回字符串的长度但是......是什么让这个 while循环? while中gets()strlen()的作用是什么?为什么有个逗号“,”?

最佳答案

首先,我需要指出 gets 函数非常危险,它已从语言中删除。你不应该使用它。

在您的情况下,由于您的 line 数组有 100 个元素长,因此只要每个输入行足够短以适合,它实际上不会导致任何问题。您可以“安全地”使用 gets,但前提是您可以完全控制程序将接收的输入。实际上,您几乎没有这种控制权。如果您在一行中输入 120 个字符,您的程序将破坏数组外的内存,从而产生任意糟糕的结果。

fgets() 函数更安全,因为它允许您指定最大长度。它也更难使用;一方面,它在输入数组中留下换行符 '\n'


现在开始您实际提出的问题。

char line[100];
while (gets(line), strlen(line)){//some stuff}

这使用了逗号运算符。逗号运算符按顺序评估其两个操作数(在本例中为 gets(line)strlen(line),然后产生其右侧操作数的结果。

gets(line) 返回它的参数,一个指向 line 的第一个字符的指针,如果失败则返回一个空指针。该结果被丢弃。 (它仍然将输入数据读入 line。)

逗号运算符的右操作数是您刚刚读取的行的长度。

whileif 语句中的条件可以是任何标量类型(整数、 float 或指针)。如果值等于 0,则条件为 false,否则为 true。

因此,只要您刚刚读取的行的长度不为零,您的 while 循环就会继续执行。换句话说,循环将重复读取输入行,在看到空行时停止。

请务必了解并非所有逗号都是逗号运算符。例如,如果一个函数有两个或多个参数,这些参数用逗号分隔;这是函数调用语法的一部分,而不是逗号运算符。


(我有没有提到你不应该使用 gets?)

关于c - 如何使用 gets() 和 strlen 循环程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25578952/

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