首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >你在C中犯过的最危险的编程错误是什么?

你在C中犯过的最危险的编程错误是什么?
EN

Stack Overflow用户
提问于 2008-11-12 06:56:38
回答 26查看 5.3K关注 0票数 9

我是一个中级C程序员。如果您犯了任何编码错误,后来才知道这是对整个应用程序最危险/最有害的,请分享该代码或说明。我想知道这一点,因为将来我可能会遇到这样的情况,我希望得到您的建议,以避免此类错误。

EN

回答 26

Stack Overflow用户

回答已采纳

发布于 2008-11-12 07:31:30

几年前,我接到前同事的电话,告诉我他必须解决我的代码的问题,我的代码是信用卡交易的路由器。

卡号前缀由6位BIN (银行识别码)和银行自行决定使用的额外几位数字组成,例如银行为Visa Classic卡456789预留BIN,并预留2位额外数字表示子产品,如01表示学生卡,02表示与当地百货商店的联合品牌卡等。在这种情况下,基本上是产品标识符的卡片前缀变成了8位数的长度。当我编写这部分代码时,我决定9位数字“对每个人来说都应该足够了”。它运行了两年,直到有一天银行制造了一个新的10位数前缀的卡产品(不知道他们为什么需要它)。不难想象发生了什么-路由器分段故障,整个系统因为没有交易路由器而无法工作,该银行(全国最大的银行之一)的所有自动取款机都在几个小时内无法操作,直到问题被发现和解决。

我不能在这里发布代码,首先是因为我没有它,其次是它是公司的版权,但不难想象

而不检查目标缓冲区的大小。

就像

说:

如果strcpy()的目标字符串不够大(也就是说,如果程序员很愚蠢或懒惰,并且在复制之前没有检查大小),那么可能会发生任何事情。溢出固定长度字符串是一种最受欢迎的破解技术。

我很尴尬。但我已经吸取了教训,不要忘记(通常是:)检查目标缓冲区的大小。我不建议你通过困难的方式来学习它--只需要养成在检查目标缓冲区之前检查一下目标缓冲区的习惯就行了。

..。

编辑:来自Healthcarel的好建议-使用

而不是

..。它没有添加尾随的0,但我通常使用下面的宏来绕过它:

票数 13
EN

Stack Overflow用户

发布于 2008-11-12 07:02:24

代码语言:javascript
复制
if (c = 1) // insert code here
票数 26
EN

Stack Overflow用户

发布于 2008-11-12 08:16:26

代码语言:javascript
复制
if(a == true);
{
  //Do sth when it is true. But it is allways executed.
}

编辑

:同一错误的另一个变体。

代码语言:javascript
复制
for(i=0; i
票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/283205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档