- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
[为清楚起见更新了组织和内容]
真正的问题
对于 C 来说,有什么好方法可以帮助程序员在他/她打字的同时,编写对项目特定的类似 printf 的调试函数的安全和正确的调用?
C 宏?C 包装函数?代码编辑器宏或模板?其他?
背景问题和答案
许多软件使用 printf 或类似 printf 的函数进行调试,或者在出现问题时临时调试,或者用于调试日志。然而它很容易出错。
Q1:我们怎么知道的?
A1:静态分析器有 printf 不匹配错误的类别——这是一类常见的错误——我经常看到这些工具在 C 代码上发出这些警告。
Q2:这个错误有哪些子类?
A2:主要是格式说明符错误,格式说明符个数错误。通常真正的错误是相反的:错误的变量类型,或错误的打印输出变量数。
Q3:我们为什么关心?
A3:充其量导致错误的日志信息并妨碍调试。最坏的情况是软件崩溃。
Q4:有没有人尝试过解决这个问题?
A4:当然,虽然我还没有看到 C 的任何内容(相对于 C++ 或其他),例如:
http://www.ddj.com/cpp/184401999?pgno=1 http://mi.eng.cam.ac.uk/~er258/cvd/tag/html/group__printf.html
除了我现在正在查看用 C 编写的产品并需要为 C 解决问题之外,我在这些产品和其他产品中缺少的是它们是事后解决方案。他们可以避免崩溃,并且可以对出错的地方提供警告解释, 出了什么问题,但他们肯定无法猜测程序员的意图(请参见上面的问答 #2)。
Q5:为什么使用printf这么容易出错?
A5:因为编写 printf 调用需要程序员在一行中混合使用变量的类型和数量、格式说明符、自由文本字符串常量和标点符号——所有这些看起来彼此非常相似。
最佳答案
gcc 提供 -Wformat
来警告 printf/scanf/strftime/strfmon 格式错误。
$ gcc -Wformat -c -o test.o test.c
test.c: In function ‘main’:
test.c:5: warning: format ‘%s’ expects type ‘char *’,
but argument 2 has type ‘int’
$ cat test.c
#include <stdio.h>
int main(int argc, const char *argv[])
{
printf("%s\n", 0);
return 0;
}
关于c - 如何帮助程序员在 C 中编写安全和正确的 printf 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1969832/
使用 Symfony2.3.4 和 Xampp 以及 PHP 5.6.3。 基本上我的目标是防止任何人直接通过任何管理器篡改数据库表(例如:xampp 附带的 phpmyadmin,通过 loca
我在尝试将 j_spring_security_check 作为操作添加到我的 login.jsp 时遇到问题 ' method="POST"> 这是我的表单,但是当我输入默认的 acc/pw adm
我很好奇Linux中的密码是如何保存在/etc/shadow中的。即使您有两个用户具有相同的密码,/etc/shadow 中的关联条目也是不同的。 u1 和 u2 的密码均设置为 123 u1:$6$
我是 Spring Security 的新手,我正在尝试实现自定义 UserDetailsService 进行身份验证。让我困扰的是,这个接口(interface)只包含一个方法loadUserB
如何使用 Bootstrap 设置我的 Flask 安全登录站点的样式? html 表单如下所示: {{ login_user_form.hidden_tag() }} {{ render_
我正在尝试在 Virgo 3.6.0.M03 上使用 Spring Security 3.1.3 创建一个简单示例。该示例包含 3 个包: 配置和发布 AuthenticationManager 的安
我正在使用 Spring Security,并且有一个用于验证用户名和密码的 REST API。那么如何在 Spring Security 中使用 REST API 来验证用户名和密码呢? 最佳答案
关于如何在 Nginx 中执行此操作的任何想法? 我试过用 proxy_cookie_path / "/; HTTPOnly; Secure"; 但它不起作用,尝试为 https://github.c
我有一个带有 @Secured({"ROLE_ADMIN"}) 的 struts2 Action 以保护执行方法。在 execute 方法中,我将消息分配给操作的成员变量,然后返回 SUCCESS 并
我正在使用 Spring 4 和 Thymeleaf在我的 index.xhtml 页面中,我写道: Welcome .... You ar
有没有办法在 Jersey 中以编程方式获取 session 管理或安全性,例如Web 应用程序 session 管理?还是事务、 session 和安全都由部署 Jersey 应用程序的容器处理?
我得知在 general Microsoft recommendation 之后我们的网络服务器将被重新配置;除其他事项外 allowSubDirConfig setting应设置为 false。因此
我正在创建一个信息系统来处理财务信息、联系人等。我正在使用面向对象的编程(类、函数等)从头开始开发网站。大部分数据将来自 MySQL 数据库。用户将能够获取数据并将其提交到数据库。 我已经在使用散列函
根据 this document和 this whitepaper ,有一些安全措施旨在防止被动窃听蓝牙 BLE 连接。有没有办法实现 iOS 中央管理器和外围设备之间的安全连接? 具体来说,我希望实
我在使用 spring-security 3.0.3 和 jersey 1.2 时遇到了以下问题: 当我使用@Secured 或@PreAuthorize 注释注释我的Jersey 资源时,sprin
我正在浏览我的网站并进行安全审核。我只是简单地接受了我需要清理所有用户输入的事实,但我从未真正停下来尝试过真正发生的事情。我现在开始尝试。 我在 PHP 页面上有一个典型的联系表单。这是_POST荷兰
我正在尝试创建一个 Web 应用程序,其中包含一个从 Twitter 检索第三方数据的组件。假设我已在 Twitter 上注册了我的应用程序并拥有 token : 是在我的服务器端代码上存储我的 to
最近几天我一直在寻找关于这个的文档.. 我需要使用 WSSE 安全 header 通过 SOAP 发送 XML,但不知道如何加密和存储加密 key 举个例子
有没有办法在不使用 response.setHeader 的情况下使 cookie 安全和/或仅限 http: response.setHeader("Set-Cookies", "name1=
在开发 Spring Web 应用程序时,我只是第一次实现了 Spring Security,为了简单起见,我现在使用一个有权访问站点某些部分的单个用户。它工作得很好,但我无法弄清楚我如何用 Juni
我是一名优秀的程序员,十分优秀!