- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我注意到一个程序正在使用这段代码循环:
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
。)
逗号运算符的右操作数是您刚刚读取的行的长度。
while
或 if
语句中的条件可以是任何标量类型(整数、 float 或指针)。如果值等于 0
,则条件为 false,否则为 true。
因此,只要您刚刚读取的行的长度不为零,您的 while
循环就会继续执行。换句话说,循环将重复读取输入行,在看到空行时停止。
请务必了解并非所有逗号都是逗号运算符。例如,如果一个函数有两个或多个参数,这些参数用逗号分隔;这是函数调用语法的一部分,而不是逗号运算符。
(我有没有提到你不应该使用 gets
?)
关于c - 如何使用 gets() 和 strlen 循环程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25578952/
我知道使用 GET 和 SET 函数的公共(public)变量的缺点/私有(private)变量的优点,但目前我正在使用 Ogre3D 开发自己的第一个“真实”游戏(C++)..同时,我有时需要 6-
我正在开发一个 GSM/GPRS 应用程序,它将每 10 秒报告一些值。我必须使用的 SIM 卡每月只有 15MB 可用数据。我使用的是 SIM900 GSM 芯片供您引用。 我到达服务器的方式是通过
这三者有什么区别:gets - 它获取带有 '\n' 的行gets.chomp - 它得到一行,但删除 '\n' 这样对吗? gets.chomp! 怎么样? 最佳答案 gets - 它得到一个末尾带
问题和我现在遇到的问题 脚本 顺便说一句,评论是挪威语的,如果它们看起来很奇怪哈哈 Connect-AzureAD #variabel $Users = Get-AzureADUser -All:$t
我现在面临的问题是获取一个 URL,如下所示: www.example.com/example.php?url=www.google.com 现在的问题是,如果我的网址中有一个 get,如下所示: w
我有一个 queryString 传递给 servlet 的 doGet() 方法,如下所示: count=9&preId0=-99&objId0=-99&preId1=-99&objId1=-99&
这是我在 Django 模板中的代码: {% for tag in tags %} {{ tag }} {% endfor %} 在view.py中: def tag_find(
我正在尝试在express.js中为我的网络应用程序创建一个路由系统,我需要知道是否需要使用app.get/post/put/delete.apply以编程方式设置多个功能对于一条路线。 也是如此 a
我正在通过示例查看 A.Mele Django,第 1 章 def post_list(request, category=None): object_list = Post.publishe
如果我想找到与IIS站点或应用程序关联的目录,我该怎么做? 我似乎无法从Get-Website和Get-WebApplication的对象的任何属性中找到任何允许我这样做的东西。 最佳答案 只需查看一
不知道发生了什么。当我执行以下代码时......它运行良好......但它产生了错误。如果我将以下内容粘贴到我的浏览器地址栏中并点击它,我会得到一个 URL。如果我通过 KRL http:get 输入
Curl 提供了一系列不同的带有 X 前缀的 http 方法调用,但也提供了不带 X 的相同方法。我两种都试过了,但我似乎无法弄清楚其中的区别。有人可以快速向我解释这两种操作有何不同吗? 最佳答案 默
request.GET.get 是什么意思?我在 Django 中看到类似的东西 page = request.GET.get('page', 1) 我认为它与类似的东西有关 « 它们是如
我正在从我的 Angular2 站点查询一些 Elasticsearch 服务器。为了帮助提高安全性,我们希望锁定对 GET 请求的访问权限。 Elasticsearch 支持带主体的 GET,但我在
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 4年前关闭。 Improve t
调用 HTable.get(List) 返回的 Result 数组的顺序是什么? ? 我的意思是,假设与输入列表的顺序相同是否正确? 最佳答案 结果数组中的顺序将与输入列表的顺序相同。与批处理方法一样
所以我有一个看起来像这样的 JSON 数组: var myData = { foo : { biz : 'baz', fig : 'tree' } }
我正在学习 Ajax、javascript 和 html,并且有一个应用程序可以触发“get”请求,然后再触发另一个“get”请求。这些请求是用户按下按钮的结果。在我的 servlet 中,我使用 T
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 6 年前。 Improv
运行以下 cmdlet 适用于组成员(Amer 域中的组)中的所有用户,无论列出的用户位于哪个域: Get-ADGroupMember -Server amer 但是,当尝试通过管道传输到 Get-
我是一名优秀的程序员,十分优秀!